diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000000000000000000000000000000000000..3f1bb703cf9f801e40fb42a8cc8652e20efb7049
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1 @@
+dist/_**/**/*
\ No newline at end of file
diff --git a/dist/olHelpers/mapPopupCls.js b/dist/olHelpers/mapPopupCls.js
index c801debb04388aa3f32186ecdf790189cb8640d7..1042a3f9ce7257ceabeb0c6407193c6a9f64f025 100644
--- a/dist/olHelpers/mapPopupCls.js
+++ b/dist/olHelpers/mapPopupCls.js
@@ -215,7 +215,8 @@ var MapPopupCls = (function (_super) {
                 }
                 return false;
             });
-            _this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
+            var mapElement = _this.map.getTargetElement();
+            mapElement.style.cursor = hit ? 'pointer' : '';
         });
         return true;
     };
diff --git a/dist/olHelpers/mapPopupCls.js.map b/dist/olHelpers/mapPopupCls.js.map
index b1483e142d295a552b15d75075638cff07ff13b6..8cf7f59febaf6ace0b0b87e5eaf974c9bab4d9b6 100644
--- a/dist/olHelpers/mapPopupCls.js.map
+++ b/dist/olHelpers/mapPopupCls.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src-ts/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/package.json b/package.json
index 099e3146874251d965f07b20b43b7d207428e010..1aa24f72f272502358702368602ec216306dab12 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
     "doc",
     "ext",
     "css",
+    "src",
     "src-ts"
   ],
   "scripts": {
diff --git a/src-ts/olHelpers/mapPopupCls.ts b/src-ts/olHelpers/mapPopupCls.ts
index 46fa30599624bac0bedc60921b262ba61ceac425..48a4ad8d192cc8b91c09fcf229bdcbd71dbb68db 100644
--- a/src-ts/olHelpers/mapPopupCls.ts
+++ b/src-ts/olHelpers/mapPopupCls.ts
@@ -299,7 +299,8 @@ class MapPopupCls extends MapInteractionBase {
 
                 return false;
             });
-            this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
+            let mapElement = this.map.getTargetElement() as HTMLElement;
+            mapElement.style.cursor = hit ? 'pointer' : '';
         });
 
         return true;
diff --git a/test-html/_css/all-ol-style.css b/test-html/_css/all-ol-style.css
new file mode 100644
index 0000000000000000000000000000000000000000..0794795dccd72cd0313ef7f46ea8bc0bbf24b826
--- /dev/null
+++ b/test-html/_css/all-ol-style.css
@@ -0,0 +1,162 @@
+.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
+.legend-container {
+  list-style: none;
+  border: solid black 1px;
+  border-radius: 5px;
+  background-color: rgba(211, 211, 211, 0.2);
+  margin: 2px;
+  padding: 2px;
+}
+.legend-container ul {
+  list-style: none;
+  padding-left: 17px;
+}
+.legend-container li {
+  border-radius: 7px;
+  margin: 2px;
+  padding: 2px 4px;
+}
+.legend-container hr {
+  display: inline-block;
+  width: 40px;
+  height: 10px;
+  background-color: blue;
+  border: none;
+  margin: 0 0 3px 7px;
+}
+.legend-container > li:first-child {
+  font-weight: bold;
+  min-height: 25px;
+}
+.legend-container > li:first-child input {
+  display: none;
+}
+.legend-container > li:first-child input + label {
+  width: 100px;
+  height: 19px;
+  margin: 5px;
+  display: inline-block;
+}
+.legend-container > li:first-child input + label > span {
+  display: inline-block;
+  width: 59px;
+  height: 19px;
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0;
+}
+.legend-container > li:first-child input:checked + label > span {
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0;
+}
+.legend-layer-subitem {
+  display: inline-block;
+  max-width: 148px;
+  overflow: hidden;
+  max-height: 20px;
+}
+.legend-layer-icon {
+  margin-left: 7px;
+}
+.legend-layer-div li {
+  margin: 0;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+.layer-not-visible {
+  background-color: gray;
+  display: none;
+}
+.layer-force-show {
+  display: inherit;
+}
+.layer-group-expander,
+.map-server-expander,
+.unique-symbol-expander,
+.legend-items-expander {
+  color: #59AFEE;
+  cursor: pointer;
+  padding-left: 4px;
+  font-size: 14px;
+}
+.esri-popup-table {
+  border-collapse: collapse;
+}
+.esri-popup-table td,
+.esri-popup-table th {
+  border: solid black 1px;
+  padding: 0 4px;
+}
+.esri-popup-table tr:nth-child(even) {
+  background-color: lightblue;
+}
+.legend-layer-name,
+.legend-check {
+  cursor: pointer;
+}
+.ol-popup {
+  position: absolute;
+  background-color: white;
+  -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  padding: 22px 5px 5px 5px;
+  border-radius: 10px;
+  border: 1px solid #cccccc;
+  bottom: 12px;
+  left: -50px;
+  min-width: 280px;
+  cursor: default;
+}
+.ol-popup:after,
+.ol-popup:before {
+  top: 100%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+.ol-popup:after {
+  border-top-color: white;
+  border-width: 10px;
+  left: 48px;
+  margin-left: -10px;
+}
+.ol-popup:before {
+  border-top-color: #cccccc;
+  border-width: 11px;
+  left: 48px;
+  margin-left: -11px;
+}
+.ol-popup-closer {
+  text-decoration: none;
+  position: absolute;
+  top: 2px;
+  right: 8px;
+  cursor: pointer;
+  color: darkblue;
+}
+.ol-popup-nav {
+  background-color: lightgray;
+  padding: 3px;
+  margin-bottom: 7px;
+}
+.ol-popup-nav-arrow {
+  color: #419CC4;
+  cursor: pointer;
+  margin: 0 3px;
+  font-size: larger;
+}
+.ol-inner-inner {
+  height: 300px;
+  overflow-y: auto;
+}
+.layer-swiper {
+  position: absolute;
+  top: 0;
+  width: 9px;
+  height: 100%;
+  border-left: solid black 1px;
+  border-right: solid black 1px;
+  background-color: lightgray;
+  z-index: 10;
+  cursor: ew-resize;
+}
diff --git a/test-html/_css/all-ol-style.less b/test-html/_css/all-ol-style.less
index 40f9e5bea3ab429919524423436a199f6a5167bd..f75adb3020f50555a873e6e8370a72338101ab5c 100644
--- a/test-html/_css/all-ol-style.less
+++ b/test-html/_css/all-ol-style.less
@@ -1,4 +1,4 @@
 @import "ol";
 @import "legend";
 @import "ol-popup";
-@import "layer-swipe";
\ No newline at end of file
+@import "layer-swipe";
diff --git a/test-html/_css/layer-swipe.css b/test-html/_css/layer-swipe.css
new file mode 100644
index 0000000000000000000000000000000000000000..59c79c6a1f5ecbb74bc25029c40fb253e0b27e16
--- /dev/null
+++ b/test-html/_css/layer-swipe.css
@@ -0,0 +1,11 @@
+.layer-swiper {
+  position: absolute;
+  top: 0;
+  width: 9px;
+  height: 100%;
+  border-left: solid black 1px;
+  border-right: solid black 1px;
+  background-color: lightgray;
+  z-index: 10;
+  cursor: ew-resize;
+}
diff --git a/test-html/_css/layer-swipe.less b/test-html/_css/layer-swipe.less
index 96465b685fed045084ac504bd2ab8c8043110f7a..4b5f5472b430c632d9230c3b06e434ae45ccb47b 100644
--- a/test-html/_css/layer-swipe.less
+++ b/test-html/_css/layer-swipe.less
@@ -1 +1,2 @@
 @import "../../css/layer-swipe";
+
diff --git a/test-html/_css/legend.css b/test-html/_css/legend.css
new file mode 100644
index 0000000000000000000000000000000000000000..f56849d66cd53150ca64abac032b8b10e89553ba
--- /dev/null
+++ b/test-html/_css/legend.css
@@ -0,0 +1,92 @@
+.legend-container {
+  list-style: none;
+  border: solid black 1px;
+  border-radius: 5px;
+  background-color: rgba(211, 211, 211, 0.2);
+  margin: 2px;
+  padding: 2px;
+}
+.legend-container ul {
+  list-style: none;
+  padding-left: 17px;
+}
+.legend-container li {
+  border-radius: 7px;
+  margin: 2px;
+  padding: 2px 4px;
+}
+.legend-container hr {
+  display: inline-block;
+  width: 40px;
+  height: 10px;
+  background-color: blue;
+  border: none;
+  margin: 0 0 3px 7px;
+}
+.legend-container > li:first-child {
+  font-weight: bold;
+  min-height: 25px;
+}
+.legend-container > li:first-child input {
+  display: none;
+}
+.legend-container > li:first-child input + label {
+  width: 100px;
+  height: 19px;
+  margin: 5px;
+  display: inline-block;
+}
+.legend-container > li:first-child input + label > span {
+  display: inline-block;
+  width: 59px;
+  height: 19px;
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0;
+}
+.legend-container > li:first-child input:checked + label > span {
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0;
+}
+.legend-layer-subitem {
+  display: inline-block;
+  max-width: 148px;
+  overflow: hidden;
+  max-height: 20px;
+}
+.legend-layer-icon {
+  margin-left: 7px;
+}
+.legend-layer-div li {
+  margin: 0;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+.layer-not-visible {
+  background-color: gray;
+  display: none;
+}
+.layer-force-show {
+  display: inherit;
+}
+.layer-group-expander,
+.map-server-expander,
+.unique-symbol-expander,
+.legend-items-expander {
+  color: #59AFEE;
+  cursor: pointer;
+  padding-left: 4px;
+  font-size: 14px;
+}
+.esri-popup-table {
+  border-collapse: collapse;
+}
+.esri-popup-table td,
+.esri-popup-table th {
+  border: solid black 1px;
+  padding: 0 4px;
+}
+.esri-popup-table tr:nth-child(even) {
+  background-color: lightblue;
+}
+.legend-layer-name,
+.legend-check {
+  cursor: pointer;
+}
diff --git a/test-html/_css/legend.less b/test-html/_css/legend.less
index 3a24ede88df819bab642821005668d650aaa97ab..e51a786aadd12e1947c3dfae8277297d12aba4cf 100644
--- a/test-html/_css/legend.less
+++ b/test-html/_css/legend.less
@@ -1 +1,2 @@
 @import "../../css/legend";
+
diff --git a/test-html/_css/media-control.css b/test-html/_css/media-control.css
new file mode 100644
index 0000000000000000000000000000000000000000..1151d2b13bca8e699c0bddbf3b17619373ab39c2
--- /dev/null
+++ b/test-html/_css/media-control.css
@@ -0,0 +1,52 @@
+.media-control-container {
+  padding: 10px;
+  text-align: center;
+}
+.media-control-container input[type=range] {
+  width: 80%;
+}
+.media-control-container input[type=range]:disabled {
+  cursor: not-allowed;
+  background-color: lightgray;
+}
+.media-player-button {
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAAAdCAMAAACddH6yAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAJycmKygmLCknKSkpKSkqLysqLCwsLS0tLi4uLi8vMCwrMi0sMS8tNCwpMTAvNzAvMDAwMTExMTEyMjIxMjIyMzMzMzM0MzQ0NjExNzMxNDQ0NTU1NTY2Njc3OTMxOTc2PDg2OTk5OTo7PTo5Pz4+Pj8/RDs2R0A9REA+QkNDQkRFR0hIS0NBS0VCTUdES0tLTU5NVFRUVVdYYFlXZl9caF9cYWBgZ2Jham1ubGxsc3JycXR2Zn6HaYCIcpSegHx7hIWFjo+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAptsNGgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAIpSURBVFhH7ZdrV9QwEIYriLDgbQsdUfCKchEVBBVUFOH//6c482a627Qz2VVzjl94PiQznZP02TRNz1bhETnUIYRa4wEbXNzUeEAza+S2xgP4ntWqxhb+tEwYaWARGg0sQvaelQYmT7U32dH+z3mmvUktRuu8jgPecmHLK4qNzCuPZ8A7XR+zeMgF+aFm8ZhHNmxkFrER2MgpfohGmvV4JT5ecR9GzrS70cgZGmC0rEmfnBEXmRVN+sBI3hqLOYz8eWcZjTTpk1ujG6PI3Ebj2+g+ob0vTdfomr7EoCUx+jUh5nMa3UO+iraJO6tr1CxI+xw7eemutKlR72clRjAAnbw10qud4sQIbY3WM6rxbtVkGRGNYwyKGBF9lbtJ4hjxAcVG3NpGRA9jxhQyosf4Ul04RhyykbSeEdFlzLlYxojW8O08qA0jKbT4Ru2jK2bUYhh1lXyj5iJeKGY0xhqNrTVawDLNeGrvYyrFMkZ3sI/OvJ29jp3NVxyjzstWyOgIX3SO/+rtxywtRYzQ5s+jcIQTctEyOo+RUsQIeVx4w2h0C91PtHvSJEYPYj8hMerDlalRn6mRQddoSNdowI0R+H9GTvUNjJzij5zRCYyckZ9zRqfRiF5rnsIFNqKXmqbwYSpGLzRN0dP/iaYpXGQj2tY0hQswosZAruOvp+YJM4tA8wS5nh3ZVNMJhuCE90i/zT3+YWSVGft98gAMPuL8d/iWKx7nilfhN6Q1MB5pcaF/AAAAAElFTkSuQmCC') no-repeat;
+  height: 29px;
+  width: 30px;
+  display: inline-block;
+  margin: 0 2px;
+  cursor: pointer;
+}
+.media-player-button:hover {
+  background-color: lightblue;
+}
+.media-pause {
+  background-position: -86px 0;
+}
+.media-play {
+  background-position: -28px 0;
+}
+.media-stop {
+  background-position: -57px 0;
+}
+.media-ahead {
+  background-position: -116px 0;
+}
+.media-back {
+  background-position: 1px 0;
+}
+.media-disabled {
+  display: none;
+}
+.media-locked {
+  background-color: lightgray !important;
+  cursor: not-allowed;
+}
+.media-control-value-label-container {
+  display: flex;
+  justify-content: space-between;
+}
+.media-control-value-label-container span {
+  display: block;
+  font-size: small;
+}
diff --git a/test-html/_css/media-control.less b/test-html/_css/media-control.less
index fbba034abd9f87088f37d8d3bb71ec299c78bb3e..6304a55b6f31c3e4e3f58a73ad09049057366a0a 100644
--- a/test-html/_css/media-control.less
+++ b/test-html/_css/media-control.less
@@ -1 +1,2 @@
 @import "../../css/media-control";
+
diff --git a/test-html/_css/ol-popup.css b/test-html/_css/ol-popup.css
new file mode 100644
index 0000000000000000000000000000000000000000..471fa855379936be37c929286dc12ff3da9f72ed
--- /dev/null
+++ b/test-html/_css/ol-popup.css
@@ -0,0 +1,58 @@
+.ol-popup {
+  position: absolute;
+  background-color: white;
+  -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  padding: 22px 5px 5px 5px;
+  border-radius: 10px;
+  border: 1px solid #cccccc;
+  bottom: 12px;
+  left: -50px;
+  min-width: 280px;
+  cursor: default;
+}
+.ol-popup:after,
+.ol-popup:before {
+  top: 100%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+.ol-popup:after {
+  border-top-color: white;
+  border-width: 10px;
+  left: 48px;
+  margin-left: -10px;
+}
+.ol-popup:before {
+  border-top-color: #cccccc;
+  border-width: 11px;
+  left: 48px;
+  margin-left: -11px;
+}
+.ol-popup-closer {
+  text-decoration: none;
+  position: absolute;
+  top: 2px;
+  right: 8px;
+  cursor: pointer;
+  color: darkblue;
+}
+.ol-popup-nav {
+  background-color: lightgray;
+  padding: 3px;
+  margin-bottom: 7px;
+}
+.ol-popup-nav-arrow {
+  color: #419CC4;
+  cursor: pointer;
+  margin: 0 3px;
+  font-size: larger;
+}
+.ol-inner-inner {
+  height: 300px;
+  overflow-y: auto;
+}
diff --git a/test-html/_css/ol.css b/test-html/_css/ol.css
new file mode 100644
index 0000000000000000000000000000000000000000..251dcb463dca4cc989d9e3b50c43ff3c536645f6
--- /dev/null
+++ b/test-html/_css/ol.css
@@ -0,0 +1 @@
+.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
diff --git a/test-html/_css/ol.less b/test-html/_css/ol.less
index bde1cbcf026fea3548b4de200013e26c72f6dac2..1685307d91c8bd40cd74811dac433d322f1c8a71 100644
--- a/test-html/_css/ol.less
+++ b/test-html/_css/ol.less
@@ -1,2 +1 @@
 @import (inline) "../../css/ol.css";
-
diff --git a/test-html/css/mapWithSidebar.css b/test-html/css/mapWithSidebar.css
new file mode 100644
index 0000000000000000000000000000000000000000..9a3ef2e6f7b51b5ddc217bb7ad6668da7fa3a35a
--- /dev/null
+++ b/test-html/css/mapWithSidebar.css
@@ -0,0 +1,185 @@
+.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
+.legend-container {
+  list-style: none;
+  border: solid black 1px;
+  border-radius: 5px;
+  background-color: rgba(211, 211, 211, 0.2);
+  margin: 2px;
+  padding: 2px;
+}
+.legend-container ul {
+  list-style: none;
+  padding-left: 17px;
+}
+.legend-container li {
+  border-radius: 7px;
+  margin: 2px;
+  padding: 2px 4px;
+}
+.legend-container hr {
+  display: inline-block;
+  width: 40px;
+  height: 10px;
+  background-color: blue;
+  border: none;
+  margin: 0 0 3px 7px;
+}
+.legend-container > li:first-child {
+  font-weight: bold;
+  min-height: 25px;
+}
+.legend-container > li:first-child input {
+  display: none;
+}
+.legend-container > li:first-child input + label {
+  width: 100px;
+  height: 19px;
+  margin: 5px;
+  display: inline-block;
+}
+.legend-container > li:first-child input + label > span {
+  display: inline-block;
+  width: 59px;
+  height: 19px;
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat 0 0;
+}
+.legend-container > li:first-child input:checked + label > span {
+  background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAATCAMAAAB2tdn3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAcHBwoKCgsLCw0NDQ4ODg8PDxAQEBYWFhcXFxsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiQkJCUlJSYmJicnJygoKCkpKSoqKiwsLC0tLS4uLi8vLzAwMDQ0NDU1NTc3Nzg4ODk5OT09PT4+Pj8/P0FBQUJCQkNDQ0REREZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1FRUVJSUlNTU1RUVFZWVldXV1hYWFlZWVpaWl5eXmBgYGFhYWJiYmRkZGZmZmhoaGlpaWpqam1tbW5ubm9vb3Nzc3V1dXd3d3l5eXx8fH5+fn9/fwCADwGBEQKCEgGJEwKKEwSMFQGRFAKSFAKTFQiXGguUHRifKAynGAipFROjJhukLR+iMSaWNCuVOCGhMSSmND+oTT20SwnQGwzRHRDCJRPDKADjHQDmGgDmGwDlHQHpHwDyFwDzGQD1GAD2GQD3HQD3HgD/HgD/HwLqIAD/IAD/IQD/IkeFTkiFUEiGUFeNXlmPX0SrU0i4VVajX2CpaW2kdF7MbGHPbnyxgoCAgIGBgYKCgoODg4SEhIWFhYiIiImJiYuLi4yMjI6OjpCQkJWVlZiYmJqampubm5ycnImwjI+zkZqomKSkpKampqioqKurq6ysrK2tra6urq+vr6SwogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4rSb8AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjOM5pdQAAAB+UlEQVRIS5WV6VfTQBTFA7YgoICsFtmxgLRShQIqCLKDKEFQ3FlERdlxwwTBBQRMKVqQRdSyCH/n803yevj65ndy8iY55957ZpJ5owDAgdceJkVSE6pMWlPoFRN7yS6qMNSbahlIUJdg1dM1VpXAUSRCL7fQoxQx4hZrDiVpvQjK/kkxajyf7Ujj4Eg/V7WBgp1KgMogDg6/9N7pus3iwcC8yDq1p3hEdRX7Aqs8At9rM9tQEglwHMvSo1eaPs1Dnxp+gpINjxKBpfqqX+Xju5mPGlxfsUZD73QZ3nxGjU0JA1h3Gt8kUI16nGo8wAmAxQlyY6K9+A1wTITWuVZUMmShGhUAcWboU7mJ6vrIJ4BwEVpe4ic7Jv7cUGinRmZMtPFZCvWWLpMbk5WcUGgHmbF5/4FCy2RDj2Z6i7y4aOMzFFrr9kt+07JQaN8UuXEZ/UihP/N8ZMdCNRqvh/7ehUky4zK4Lf5eG26cqmsy+9RoL0BNtLVPX8pN9e0z1NgV7L8AhaXLAW5L+tGUJbo1dqQoLF8fv5boSGP9KPnlVoK4TgA1ZzPTWZzJcJavCcUFvP5h/fO85173XRb3H84JZeJfBdz4geQxTxnzrJDlhlOcp66ETXpmc4XO0+RLVuWzlZJnHuKw67GFS5HYYDkANCfTKyY2VxAA/gOxObo6iNgi8wAAAABJRU5ErkJggg==') no-repeat -59px 0;
+}
+.legend-layer-subitem {
+  display: inline-block;
+  max-width: 148px;
+  overflow: hidden;
+  max-height: 20px;
+}
+.legend-layer-icon {
+  margin-left: 7px;
+}
+.legend-layer-div li {
+  margin: 0;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+.layer-not-visible {
+  background-color: gray;
+  display: none;
+}
+.layer-force-show {
+  display: inherit;
+}
+.layer-group-expander,
+.map-server-expander,
+.unique-symbol-expander,
+.legend-items-expander {
+  color: #59AFEE;
+  cursor: pointer;
+  padding-left: 4px;
+  font-size: 14px;
+}
+.esri-popup-table {
+  border-collapse: collapse;
+}
+.esri-popup-table td,
+.esri-popup-table th {
+  border: solid black 1px;
+  padding: 0 4px;
+}
+.esri-popup-table tr:nth-child(even) {
+  background-color: lightblue;
+}
+.legend-layer-name,
+.legend-check {
+  cursor: pointer;
+}
+.ol-popup {
+  position: absolute;
+  background-color: white;
+  -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
+  padding: 22px 5px 5px 5px;
+  border-radius: 10px;
+  border: 1px solid #cccccc;
+  bottom: 12px;
+  left: -50px;
+  min-width: 280px;
+  cursor: default;
+}
+.ol-popup:after,
+.ol-popup:before {
+  top: 100%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+.ol-popup:after {
+  border-top-color: white;
+  border-width: 10px;
+  left: 48px;
+  margin-left: -10px;
+}
+.ol-popup:before {
+  border-top-color: #cccccc;
+  border-width: 11px;
+  left: 48px;
+  margin-left: -11px;
+}
+.ol-popup-closer {
+  text-decoration: none;
+  position: absolute;
+  top: 2px;
+  right: 8px;
+  cursor: pointer;
+  color: darkblue;
+}
+.ol-popup-nav {
+  background-color: lightgray;
+  padding: 3px;
+  margin-bottom: 7px;
+}
+.ol-popup-nav-arrow {
+  color: #419CC4;
+  cursor: pointer;
+  margin: 0 3px;
+  font-size: larger;
+}
+.ol-inner-inner {
+  height: 300px;
+  overflow-y: auto;
+}
+.layer-swiper {
+  position: absolute;
+  top: 0;
+  width: 9px;
+  height: 100%;
+  border-left: solid black 1px;
+  border-right: solid black 1px;
+  background-color: lightgray;
+  z-index: 10;
+  cursor: ew-resize;
+}
+html,
+body {
+  height: 100%;
+  width: 100%;
+}
+html > div,
+body > div {
+  display: flex;
+  height: 100%;
+}
+html > div > div,
+body > div > div {
+  height: 100%;
+}
+html > div > div:first-of-type,
+body > div > div:first-of-type {
+  width: 30%;
+  min-width: 300px;
+}
+html > div > div:last-of-type,
+body > div > div:last-of-type {
+  flex: 1;
+}
diff --git a/test-html/js/another.js b/test-html/js/another.js
new file mode 100644
index 0000000000000000000000000000000000000000..636685796bfd6c05d79ef10b44a6e03daa0079a5
--- /dev/null
+++ b/test-html/js/another.js
@@ -0,0 +1,56 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 9/22/2016.
+	 */
+	console.log('here is another');
+	console.log('here is another');
+
+
+/***/ }
+/******/ ]);
+//# sourceMappingURL=another.js.map
\ No newline at end of file
diff --git a/test-html/js/another.js.map b/test-html/js/another.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b1190e9335ff6202c20c8017843ada39fce863a5
--- /dev/null
+++ b/test-html/js/another.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4","webpack:///./src-ts/_test/another.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;IAEG;AAEH,QAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,QAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC","file":"another.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\nconsole.log('here is another');\r\nconsole.log('here is another');\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/another.ts\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/compare-test.js b/test-html/js/compare-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..3cd31acb7675f203dcb4decb0a03e551bd487cb2
--- /dev/null
+++ b/test-html/js/compare-test.js
@@ -0,0 +1,12512 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 6/1/2016.
+	 */
+	var quickMap_1 = __webpack_require__(1);
+	var layerSwipe_1 = __webpack_require__(14);
+	var LayerEsriMapServer_1 = __webpack_require__(15);
+	var map = quickMap_1.quickMap();
+	var swiper = new layerSwipe_1.default(map);
+	var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', {
+	    minZoom: 6,
+	    maxZoom: 12,
+	    name: 'WisDOT Regions'
+	});
+	var metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', {
+	    minZoom: 7,
+	    visible: true,
+	    name: 'Metamanager Segments'
+	});
+	var truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
+	    minZoom: 7,
+	    visible: true,
+	    name: 'truck2014',
+	    showLayers: [8]
+	});
+	var truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
+	    minZoom: 7,
+	    visible: true,
+	    name: 'truck2015',
+	    showLayers: [9]
+	});
+	map.addLayer(wisDotRegions.olLayer);
+	map.addLayer(truckSpeed2014.olLayer);
+	map.addLayer(truckSpeed2015.olLayer);
+	map.addLayer(metamanagerSegments.olLayer);
+	swiper.addLeftLayer(wisDotRegions);
+	swiper.addRightLayer(metamanagerSegments);
+	swiper.addLeftLayer(truckSpeed2014);
+	swiper.addRightLayer(truckSpeed2015);
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/15/2015.
+	 */
+	"use strict";
+	var quickMapBase_1 = __webpack_require__(2);
+	var provide_1 = __webpack_require__(4);
+	var mapMove_1 = __webpack_require__(7);
+	var mapPopup_1 = __webpack_require__(12);
+	var nm = provide_1.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 the ol map
+	 */
+	function quickMap(options) {
+	    var m = quickMapBase_1.quickMapBase(options);
+	    mapMove_1.default.init(m);
+	    mapPopup_1.default.init(m);
+	    return m;
+	}
+	exports.quickMap = quickMap;
+	nm.quickMap = quickMap;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = quickMap;
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/15/2015.
+	 */
+	"use strict";
+	var $ = __webpack_require__(3);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * Sets up a map with some default parameters and initializes
+	 * mapMove and mapPopup
+	 *
+	 * @param [options={}] config options
+	 * @param [options.divId=map] map div id
+	 * @param [options.center={}] center config object
+	 * @param [options.center.x=-10018378] center x, web mercator x or lon
+	 * @param [options.center.y=5574910] center y, web mercator y or lat
+	 * @param [options.zoom=7] zoom level
+	 * @param [options.minZoom=undefined] min zoom
+	 * @param [options.maxZoom=undefined] max zoom
+	 * @param [options.baseSwitcher=true] if add base map switcher
+	 * @param [options.fullScreen=false] if add base map switcher
+	 * @returns the ol map
+	 */
+	function quickMapBase(options) {
+	    options = options || {};
+	    options.divId = options.divId || 'map';
+	    options.center = options.center || { x: -10018378, 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 = $('#' + options.divId);
+	    $mapDiv.css('position', 'relative');
+	    var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() });
+	    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.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) {
+	    }
+	    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 custom_ol_1.ol.geom.Point([options.center.x, options.center.y]);
+	        new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+	        p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" }));
+	        var coordinates = p.getCoordinates();
+	        options.center.x = coordinates[0];
+	        options.center.y = coordinates[1];
+	    }
+	    var map = new custom_ol_1.ol.Map({
+	        layers: [osmLayer],
+	        target: options.divId,
+	        controls: custom_ol_1.ol.control.defaults({
+	            attributionOptions: { collapsible: false }
+	        }),
+	        view: new custom_ol_1.ol.View({
+	            center: [options.center.x, options.center.y],
+	            zoom: options.zoom,
+	            minZoom: options.minZoom,
+	            maxZoom: options.maxZoom
+	        })
+	    });
+	    if (options.fullScreen) {
+	        //TODO add full screen options to ts
+	        map.addControl(new custom_ol_1.ol.control.FullScreen({}));
+	    }
+	    return map;
+	}
+	exports.quickMapBase = quickMapBase;
+	nm.quickMapBase = quickMapBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = quickMapBase;
+
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+	 * 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 ( true ) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+			return jQuery;
+		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+	
+	
+	
+	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;
+	}));
+
+
+/***/ },
+/* 4 */
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 12/10/2015.
+	 */
+	"use strict";
+	/**
+	 * 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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = provide;
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	exports.ol = __webpack_require__(6);
+	// // export default require('../ol/ol-build');
+	//
+	// const fish = 10;
+	// export = fish;
+	//
+	//
+	// export function cat(bird: string){
+	//     console.log('eat the fish')
+	// }
+	//
+	// export function nice(eat: number){
+	//     console.log('eat that fish');
+	// }
+	//
+	// export class Big{
+	//     glenn: string;
+	//
+	//     constructor(isGlenn){
+	//         this.glenn  = isGlenn;
+	//     }
+	//
+	//     set isGlenn(f: string){
+	//         console.log(this.glenn)
+	//     }
+	//
+	//     run(){
+	//         console.log(this.glenn + " can run");
+	//     }
+	// }
+	//
+	// export namespace HereIt{
+	//
+	//     export class Big2 {
+	//         glenn: string;
+	//
+	//         constructor(isGlenn) {
+	//             this.glenn = isGlenn;
+	//         }
+	//
+	//         set isGlenn(f: string) {
+	//             console.log(this.glenn)
+	//         }
+	//
+	//         run() {
+	//             console.log(this.glenn + " can run");
+	//         }
+	//     }
+	//
+	//
+	// } 
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var require;var require;/* WEBPACK VAR INJECTION */(function(global) {// OpenLayers 3. See http://openlayers.org/
+	// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
+	;(function (root, factory) {
+	  if (true) {
+	    module.exports = factory();
+	  } else if (typeof define === "function" && define.amd) {
+	    define([], factory);
+	  } else {
+	    root.ol = factory();
+	  }
+	}(this, function () {
+	  var OPENLAYERS = {};
+	  var n,aa=this;
+	function ba(){var a=aa.setImmediate,b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
+	else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}
+	function ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if("undefined"!==typeof window)var K=window;else"undefined"!==typeof global?K=global:"undefined"!==typeof self&&(K=self);function ha(a){this.message="Assertion failed. See /doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}
+	function xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}
+	function M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c="string"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};
+	function Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,"change")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]="change:"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja("propertychange",a,c))))};
+	V.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}
+	function Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}
+	function jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}
+	function nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}
+	function ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}
+	function qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){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 Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}
+	Ab.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db["us-ft"]=1200/3937;
+	function Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);
+	else{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if("degrees"==this.a)return a;var c=Mb(this,Hb("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};
+	Eb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?"string"===typeof a?Hb(a):a:Hb("EPSG:3857")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}
+	function Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if("string"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}
+	function Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c="XY";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};
+	n.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c="XY";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};
+	n.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};
+	n.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=
+	a[b+m*d],f[g++]=a[b+m*d+1]);return g}
+	function hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=
+	z,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LinearRing"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return"Point"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,"XY",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}
+	function oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}
+	function sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,"XY",b,c);return a};n.$=function(){return"Polygon"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,"XY",null,this.ja)};
+	function rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;
+	void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:"number"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,
+	a.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};
+	function yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};
+	n.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,"XY",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),
+	l=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};
+	n.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc="center",wc="resolution",xc="rotation";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}
+	function Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}
+	function Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:
+	this.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};
+	Mc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}
+	function Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}
+	function Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get("length");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get("length")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};
+	function fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set("length",a.a.length)}var hd="add",id="remove";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ld=/^(?: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,md=/^([a-z]*)$/i;function nd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a}
+	var pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,
+	d=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=""}function xd(a){return-1!=ud.indexOf(a)};var yd=xd("Opera"),zd=xd("Trident")||xd("MSIE"),Ad=xd("Edge"),Bd=xd("Gecko")&&!(-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"))&&!(xd("Trident")||xd("MSIE"))&&!xd("Edge"),Cd=-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"),Dd;
+	a:{var Ed="",Fd=function(){var a=ud;if(Bd)return/rv\:([^\);]+)(\)|;)/.exec(a);if(Ad)return/Edge\/([\d\.]+)/.exec(a);if(zd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Cd)return/WebKit\/(\S+)/.exec(a);if(yd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:"");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")}
+	var Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),
+	c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}();
+	function Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id["9.0"])){for(var c=0,d=rd(String(Dd)).split("."),e=rd("9.0").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 p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==
+	p[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,"matrix3d("+e.join(",")+")")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}
+	function Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D="string"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};
+	Ud.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,"postrender",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement("UL");this.j=document.createElement("LI");this.B.appendChild(this.j);this.j.style.display="none";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.h=document.createElement("span"),this.h.textContent=d):this.h=
+	d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.s=document.createElement("span"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);R(d,"click",this.P,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.g&&this.v?" ol-collapsed":"")+(this.v?"":" ol-uncollapsible");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?
+	a.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);
+	function Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+
+	1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display="",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display="none",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement("LI"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=
+	d,this.a[A]=!0;for(A in b)d=document.createElement("LI"),d.innerHTML=b[A].a,d.style.display="none",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?"":"none",this.u=A);A&&sa(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,""===
+	b?c=F:(c=document.createElement("a"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?"none":""}else this.u&&(this.element.style.display="none",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.g="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.h="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.a+"-"+Yd();b.setAttribute("type","button");b.title=c;b.appendChild(this.g);R(b,"click",this.v,this);c=document.createElement("div");
+	c.className=this.a+" ol-unselectable ol-control "+(Zd()?"":"ol-unsupported");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);
+	Xd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?"string"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):
+	$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+"-true",Rd(this.h,this.g)):(a.className=this.a+"-false",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};
+	function Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}
+	function $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.a=null;"string"===typeof c?(this.a=document.createElement("span"),this.a.className="ol-compass",this.a.textContent=c):(this.a=c,this.a.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.a);R(c,"click",be.prototype.s,this);d=document.createElement("div");
+	d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add("ol-hidden")}B(be,Ud);
+	be.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};
+	function ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b="rotate("+a+"rad)";if(this.c){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);R(h,"click",de.prototype.c.bind(this,
+	c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);R(d,"click",de.prototype.c.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);
+	de.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;
+	function ge(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!xd("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ea(function(a){if(("*"==d||a.origin==d)&&a.data==
+	c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!xd("Trident")&&!xd("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT");
+	b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",le=-1!==ke.indexOf("firefox"),me=-1!==ke.indexOf("safari")&&-1===ke.indexOf("chrom"),ne=-1!==ke.indexOf("macintosh"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!("HTMLCanvasElement"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re="ontouchstart"in K,se="PointerEvent"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];
+	if("WebGLRenderingContext"in K)try{var we=ie(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}n=ye.prototype;
+	n.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};
+	n.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=["","unavailable","touch","pen","mouse"]}B(Je,xe);function Ke(a,b){var c=b;"number"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};
+	n.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le("lostpointercapture",a,a))};n.Vd=function(a){U(this.b,new Le("gotpointercapture",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget:
+	null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}
+	var Qe=!1;try{Qe=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};
+	function Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}
+	function Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}
+	n.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};
+	n.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};
+	n.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};
+	function Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};
+	function $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}
+	function He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};
+	var Fe="pointermove",Ee="pointerdown",Ge="pointerup",Ve="pointerover",cf="pointerout",We="pointerenter",Xe="pointerleave",De="pointercancel",bf=[["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 df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);
+	function ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}
+	function lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};
+	n.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};
+	n.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf="singleclick",hf="click",jf="dblclick",qf="pointerdrag",pf="pointermove",of="pointerdown",mf="pointerup",nf="pointercancel",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:"pointerover",Me:"pointerout",Je:"pointerenter",Ke:"pointerleave",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);
+	function tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get("maxResolution"),h=a.get("minResolution");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get("extent")};n.Xb=function(){return this.get("opacity")};n.gb=function(){return this.get("visible")};n.Yb=function(){return this.get("zIndex")};n.Bc=function(a){this.set("opacity",a)};n.Cc=function(a){this.set("visible",a)};
+	n.Dc=function(a){this.set("zIndex",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:"ready";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if("string"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};
+	vf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La("source"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get("source")||null};n.Sb=function(){var a=this.da();return a?a.T():"undefined"};n.fe=function(){this.w()};
+	n.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,"change",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,"precompose",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,"change",a.render,a),this.w())};n.$b=function(a){this.set("source",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?nd(c):"null");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?nd(c):"null")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}
+	function Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}
+	function Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}
+	n.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};
+	n.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,"change",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}
+	function Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=""}B(Sf,Ga);function Tf(a){U(a,"change")}Sf.prototype.getKey=function(){return this.key+"/"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};
+	function Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],"change",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,"change",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set("active",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}
+	function eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function mg(a){L(a.b,56);return"mouse"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}
+	function og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}
+	function tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();
+	zc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}
+	function yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"}
+	zg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||"ol-dragbox");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}
+	function Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxdrag",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg("boxend",a.coordinate,a)));return!1}
+	function Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxstart",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}B(Ig,Dg);
+	Ig.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);
+	function Kg(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);
+	function Og(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}
+	Ng.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);
+	function Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}
+	function Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}
+	function Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La("layers"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set("layers",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};
+	n.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get("layers");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,"propertychange",this.rb,this),R(d,"change",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,"propertychange",this.rb,this),R(a,"change",this.rb,this)];this.w()};
+	n.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get("layers"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return"ready"};function Yg(a){Eb.call(this,{code:a,units:"m",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh="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(a){return new Yg(a)});
+	function ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:"degrees",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};
+	var gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh("CRS:84"),new fh("EPSG:4326","neu"),new fh("urn:ogc:def:crs:EPSG::4326","neu"),new fh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new fh("urn:ogc:def:crs:OGC:1.3:CRS84"),new fh("urn:ogc:def:crs:OGC:2:84"),new fh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new fh("urn:x-ogc:def:crs:EPSG:4326","neu")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set("preload",void 0!==a.preload?a.preload:0);this.set("useInterimTilesOnError",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get("useInterimTilesOnError")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));
+	else{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):"-",h=this.g?rh(this.g):"-";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?
+	a.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;
+	n.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};
+	n.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():"f"+(a.b?nd(a.b):"-"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();
+	function vh(a,b,c){c||(c=0);var d=Array(16);if("string"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=
+	c+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>
+	20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|
+	g>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|
+	g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|
+	g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^
+	b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;
+	f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+
+	(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;
+	c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}
+	function wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if("string"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}
+	function qh(a){if(void 0===a.l){var b="s"+(a.a?nd(a.a):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.b?a.b.toString():"-")+","+(void 0!==a.g?a.g:"-")+","+(void 0!==a.h?a.h.toString():"-")+","+(void 0!==a.c?a.c.toString():"-"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,
+	d);else for(c="",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){"function"===typeof b?a.c=b:"string"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}
+	function Bh(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:"rgba(255,255,255,0.4)"}),b=new xh({color:"#3399CC",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}
+	function Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,
+	a.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c="";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);
+	function Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}
+	function Ih(a,b,c,d){var e=0;if(a.ca&&""!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+
+	a.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;
+	n.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};
+	n.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}""!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};
+	n.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}""!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}""!==this.c&&(a=tc(a),Ih(this,a,2,2))}};
+	n.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}
+	function Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=
+	b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}
+	n.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};
+	n.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};
+	n.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==a?a:"middle"};this.c=void 0!==
+	h?h:"";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=""};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&"ready"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}
+	function Wh(a,b){var c=b.D;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(L("string"==typeof c.href,44),L("string"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}
+	function Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}
+	ai.prototype.g=function(a,b,c){ci(this,"precompose",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,"postcompose",c,a,void 0)};
+	function ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=["Polygon","LineString","Image","Text"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);
+	function hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=
+	k[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}
+	function ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+
+	q,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);
+	1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split("\n");S=O.length;1<S?(X=Math.round(1.5*b.measureText("M").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;
+	case 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);
+	D=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}
+	function li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);
+	mi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};
+	mi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};
+	mi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);
+	function oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};
+	function pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}
+	n.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};
+	n.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};
+	n.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:"round";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:"round";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};
+	function qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);
+	function ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;
+	n.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};
+	n.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};
+	n.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};
+	n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};
+	n.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:"round",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};
+	function si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j="";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);
+	function ui(a,b,c,d,e){if(""!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=
+	f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=
+	{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}
+	ti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:"round",e=e?e.slice():lh,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;
+	var k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:"10px sans-serif";h=void 0!==h?h:"center";l=void 0!==l?l:"middle";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:"";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);
+	function wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};
+	vi.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};
+	vi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};
+	function xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}
+	var Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();
+	if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=
+	b.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf("OPR"),Gi=-1<Ei.navigator.userAgent.indexOf("Edge");Di=!(!Ei.navigator.userAgent.match("CriOS")&&null!==Ei.chrome&&void 0!==Ei.chrome&&"Google Inc."===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}
+	function Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-
+	r[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=
+	g[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=
+	-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,
+	a.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}
+	function Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],
+	w=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}
+	function Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);
+	Mi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,"precompose",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,"render"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*
+	(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+
+	N),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],
+	P[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,"render",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,"postcompose",c,a,d)};
+	Mi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=
+	x:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get("preload"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);
+	Oi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,"precompose",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,"render")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=
+	b.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,"render",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,"postcompose",c,a,m)};
+	Oi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};
+	Oi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get("renderOrder");
+	void 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};
+	function Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return"canvas"};
+	Ri.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,"precompose",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&"ready"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,"postcompose",a);this.a||(this.b.style.display=
+	"",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display="none",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement("DIV");b.style.position="absolute";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};
+	Ui.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display="none",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=
+	t.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,
+	F),t.i),O=z.Z(t),S=O.style;S.maxWidth="none";var X,P;0<G?(X=document.createElement("DIV"),P=X.style,P.overflow="hidden",P.width=F[0]+"px",P.height=F[1]+"px",S.position="absolute",S.left=-G+"px",S.top=-G+"px",S.width=F[0]+2*G+"px",S.height=F[1]+2*G+"px",X.appendChild(O)):(S.width=F[0]+"px",S.height=F[1]+"px",X=O,P=S);P.position="absolute";P.left=(Q-t.c[1])*F[0]+"px";P.top=(t.c[2]-N)*F[1]+"px";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),
+	r.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&
+	!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display="",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get("preload"));Uh(a,g);Wh(a,g);return!0};
+	function Vi(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth="none";b.style.position="absolute";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};
+	n.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,"precompose",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,"render",a,d));Xi(this,"postcompose",a,d)};
+	function Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};
+	n.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get("renderOrder");
+	void 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";R(this.b,"touchstart",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};
+	Yi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return"dom"};
+	Yi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,"precompose")||Ha(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,"precompose",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&"ready"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||
+	(this.b.style.display="",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b="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;}"}B(cj,aj);var dj=new cj;
+	function ej(){this.b="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;}"}B(ej,bj);var fj=new ej;
+	function gj(a,b){this.i=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.h=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.c=a.getAttribLocation(b,"g");this.g=a.getAttribLocation(b,"d")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf("OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");R(this.C,"webglcontextlost",this.K,this);R(this.C,"webglcontextrestored",this.s,this)}B(jj,Aa);
+	function kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}
+	jj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};
+	function mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;
+	a.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+"/"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};
+	function qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);
+	function tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}
+	function uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=
+	H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};
+	function vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}
+	function wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}
+	sj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,
+	1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-
+	1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);
+	return u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}
+	sj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};
+	function yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};
+	yj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}
+	yj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};
+	function Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};
+	Fj.prototype.Ma=function(a){this.a=a};function Gj(){this.b="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;}"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b="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;}"}B(Ij,bj);var Jj=new Ij;
+	function Kj(a,b){this.c=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.h=a.getUniformLocation(b,"d");this.g=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);
+	function Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}
+	Lj.prototype.Jc=function(a,b,c){Nj(this,"precompose",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,"postcompose",
+	c,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b="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;}"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([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.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};
+	Tj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];
+	Mj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==
+	b.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,
+	v),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get("preload"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,
+	-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};
+	n.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};
+	n.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get("renderOrder");
+	void 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};
+	Xj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,"webglcontextlost",this.ge,this);R(this.b,"webglcontextrestored",this.he,this);this.a=new Xj;this.K=null;this.l=
+	new Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);
+	function Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,
+	6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}
+	n.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return"webgl"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};
+	function bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}
+	n.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display="none",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,"precompose",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&"ready"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=
+	e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display="",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,"postcompose",a);Rf(this,a);a.postRenderFunctions.push(Pf)};
+	n.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=["canvas","webgl","dom"];
+	function Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(re?" 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.s=document.createElement("DIV");this.s.className="ol-overlaycontainer";this.a.appendChild(this.s);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",of,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);
+	this.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Sa,this);R(this.a,"mousewheel",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La("layergroup"),this.vd,this);R(this,La("view"),this.Kd,this);R(this,La("size"),this.Gd,this);R(this,La("target"),this.Id,
+	this);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},
+	this)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get("layers").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};
+	n.R=function(){Da(this.ma);Da(this.N);ya(this.a,"wheel",this.Sa,this);ya(this.a,"mousewheel",this.Sa,this);void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};
+	n.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get("target")};n.Ra=function(){var a=this.Wb();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};
+	function fk(a){return a.get("layergroup")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get("size")};n.U=function(){return this.get("view")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};
+	n.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get("active")&&!d.handleEvent(a))break}}};
+	n.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};
+	n.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,"keydown",this.Sa,this),R(a,"keypress",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener("resize",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};
+	n.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,"propertychange",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,"propertychange",this.render,this),R(a,"change",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get("layers").remove(a)};
+	n.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,
+	postRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td("moveend",this,h)),gb(h.extent,
+	this.va)));U(this,new Td("postrender",this,h));d=g=this.Fd;this&&(d=ea(g,this));"function"!=ba()||aa.Window&&aa.Window.prototype&&!xd("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};
+	n.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set("size",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set("size",void 0)};
+	function ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["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 e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L("string"==typeof e.href,44),L("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];
+	if("canvas"==k){if(qe){e=Ri;break}}else if("dom"==k){e=Yi;break}else if("webgl"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:
+	1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:
+	1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:"",sb:"",wb:"",xb:"",visible:!0};this.f=null;R(this,La("element"),this.td,this);R(this,La("map"),
+	this.Ad,this);R(this,La("offset"),this.Bd,this);R(this,La("position"),this.Dd,this);R(this,La("positioning"),this.Ed,this);void 0!==a.element&&this.set("element",a.element);this.set("offset",void 0!==a.offset?a.offset:[0,0]);this.set("positioning",void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get("element"))&&this.c.appendChild(a)};
+	n.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get("map");a&&(this.f=R(a,"postrender",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};
+	n.Dd=function(){hk(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.get("map");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get("element"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&
+	(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set("map",a)};n.Ac=function(a){this.set("position",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}
+	function jk(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)}
+	function hk(a){var b=a.get("map"),c=a.get("position");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get("offset"),f=a.get("positioning"),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.sb&&(a.a.sb=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.wb!=g&&(a.a.wb=b.right=g);else{""!==a.a.wb&&(a.a.wb=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.sb!=g&&(a.a.sb=b.left=g)}if("bottom-left"==
+	f||"bottom-center"==f||"bottom-right"==f)""!==a.a.xb&&(a.a.xb=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{""!==a.a.lb&&(a.a.lb=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a="geometry";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};
+	n.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,"change",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open("GET","function"===typeof a?a(d,e,f):a,!0);"arraybuffer"==b.$()&&(g.responseType="arraybuffer");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;"json"==a||"text"==a?d=g.responseText:"xml"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,"application/xml"))):"arraybuffer"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}
+	function qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}
+	function tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return"json"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?
+	(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LineString"};
+	n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}
+	n.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,"XY",b);a.ua=c;a.w();return a};n.$=function(){return"MultiLineString"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,"XY",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return"MultiPoint"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};
+	function Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}
+	function Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,"XY",b);d.a=c;d.w();return d};n.$=function(){return"MultiPolygon"};
+	n.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,"XY",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b}
+	var Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new jc([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new jc([a.x,a.y,a.m],"XYM"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};
+	Ak.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if("number"===typeof c.x&&"number"===typeof c.y)d="Point";else if(c.points)d="MultiPoint";else if(c.paths)d=1===c.paths.length?"LineString":"MultiLineString";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||
+	g.push([e.reverse()])}c=pa({},c);1===g.length?(d="Polygon",c.rings=g[0]):(d="MultiPolygon",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};
+	Ak.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb("EPSG:"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],"change",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],"change",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};
+	n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return"GeometryCollection"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};
+	n.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}
+	var Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};
+	Gk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if("Feature"==a.type)c=[this.b(a,b)];else if("FeatureCollection"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};
+	Gk.prototype.c=function(a){a=a.crs;var b;a?"name"==a.type?b=Hb(a.properties.name):"EPSG"==a.type?b=Hb("EPSG:"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement("CANVAS"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,"change")};
+	Jk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext("2d");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,"change")};
+	Jk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,"error",this.j,this,!0),R(this.b,"load",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==
+	a.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?
+	a.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if("fraction"==this.l||"fraction"==this.i){if(!b)return null;a=this.g.slice();"fraction"==this.l&&(a[0]*=b[0]);"fraction"==this.i&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};
+	n.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if("top-left"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};
+	n.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,"change",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,"change",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return"Circle"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,"XY",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};
+	n.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,"error",this.ce,this,!0),R(this.a,"load",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;
+	(function(){var a={},b={Aa:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.Aa=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q="function"==typeof require&&require;if(!p&&q)return require(l,!0);if(k)return k(l,!0);q=Error("Cannot find module '"+l+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=
+	a[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k="function"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}
+	function k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],
+	h;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a("quickselect");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,
+	d=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),
+	k=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},
+	ec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;
+	q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,
+	f,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=
+	f,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,
+	d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=["return a"," - b",";"];this.Kb=new Function("a","b",b.join(a[0]));this.Lb=new Function("a","b",b.join(a[1]));this.la=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:
+	1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}
+	function Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,
+	d;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl("addfeature",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,"change",a.vc,a),R(c,"propertychange",a.vc,a)]}
+	function $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl("addfeature",h[d]))}
+	function Zk(a,b){var c=!1;R(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}
+	n.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl("clear"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}
+	n.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};
+	n.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl("changefeature",a))};
+	function Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl("removefeature",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);
+	function el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if("Circle"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],
+	g=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,
+	La("active"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}
+	function hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}
+	function pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}
+	function tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}
+	function ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl("drawstart",a.g))}
+	function nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}
+	function sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));"MultiPoint"===a.P?lk(b,new yk([c])):"MultiLineString"===a.P?lk(b,new xk([c])):"MultiPolygon"===a.P&&lk(b,new zk([c]));U(a,new dl("drawend",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;
+	function ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get("active");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;"Point"===a||"MultiPoint"===a?b=kl:"LineString"===a||"MultiLineString"===a?b=ll:"Polygon"===a||"MultiPolygon"===a?b=jl:"Circle"===a&&(b=rl);return b}var kl="Point",ll="LineString",jl="Polygon",rl="Circle";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||
+	0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};
+	wl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};
+	wl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};
+	wl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,"change",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}
+	function Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=""}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};
+	function Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+"/"+b+"/"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};
+	function Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;
+	function Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join("\n");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}
+	B(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl("tileloadstart",a));break;case 2:U(this,new Fl("tileloadend",a));break;case 3:U(this,new Fl("tileloaderror",a))}};function Hl(a,b,c){a.tileUrlFunction=b;"undefined"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}
+	Gl.prototype.s=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}
+	B(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};
+	n.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,"change",a.v,a);return e}
+	function $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}
+	function Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb("EPSG:3857").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,
+	tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};
+	Ql.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),
+	b==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.h,void 0===
+	e&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):"-",f=this.i?rh(this.i):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!==
+	this.c?this.c.toString():"-")+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==
+	a.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;
+	n.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};
+	n.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y("ol.format.GeoJSON",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y("ol.format.EsriJSON",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y("ol.style.Style",yh);y("ol.style.Circle",ph);y("ol.style.RegularShape",Rl);y("ol.style.Fill",sh);y("ol.style.Stroke",xh);y("ol.style.Icon",Lk);
+	y("ol.style.Text",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:"#333"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y("ol.View",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;
+	uc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y("ol.control.defaults",ee);y("ol.layer.Tile",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;
+	W.prototype.on=W.prototype.Y;y("ol.layer.Vector",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y("ol.source.OSM",Ol);Ol.prototype.refresh=Ol.prototype.Ja;
+	y("ol.source.XYZ",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y("ol.Map",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;
+	Z.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y("ol.source.Vector",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;
+	Xk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y("ol.source.TileArcGISRest",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y("ol.Overlay",gk);gk.prototype.setPosition=gk.prototype.Ac;y("ol.Feature",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y("ol.geom.Point",jc);
+	jc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y("ol.geom.Polygon",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y("ol.geom.LineString",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y("ol.proj.Projection",Eb);Eb.prototype.getCode=Eb.prototype.l;
+	y("ol.interaction.Draw",el);el.prototype.on=el.prototype.Y;y("ol.animation.pan",Dc);y("ol.control.FullScreen",Xd);
+	  return OPENLAYERS.ol;
+	}));
+	
+	
+	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var mapMoveCls_1 = __webpack_require__(8);
+	/**
+	 * The single map move object catch is that it is common to multimap pages
+	 * @type {MapMoveCls}
+	 */
+	exports.mapMove = new mapMoveCls_1.default();
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = exports.mapMove;
+
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var mapInteractionBase_1 = __webpack_require__(9);
+	var checkDefined = __webpack_require__(10);
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * assists with map move interactions, trigger callback functions
+	 * @augments MapInteractionBase
+	 */
+	var MapMoveCls = (function (_super) {
+	    __extends(MapMoveCls, _super);
+	    /**
+	     * constructor called implicitly
+	     */
+	    function MapMoveCls() {
+	        _super.call(this, 'map move');
+	        this._arrLyrRequest = [];
+	        this._arrLyrTimeout = [];
+	        this._arrLayer = [];
+	        this._lookupLayer = {};
+	        this._mapMoveCallbacks = [];
+	        this._mapMoveCallbacksLookup = {};
+	        this._mapMoveCallbackDelays = [];
+	        this._mapMoveCallbackContext = [];
+	        this._mapMoveCallbackTimeout = [];
+	        this._mapExtent = undefined;
+	        this._zoomLevel = undefined;
+	    }
+	    /**
+	     * initialize the map move object
+	     * @param theMap - the ol map
+	     */
+	    MapMoveCls.prototype.init = function (theMap) {
+	        var _this = this;
+	        _super.prototype.init.call(this, theMap);
+	        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);
+	            }
+	        });
+	    };
+	    MapMoveCls.prototype._updateMapExtent = function () {
+	        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]
+	        };
+	    };
+	    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
+	        /**
+	         * return the map extent
+	         */
+	        get: function () {
+	            if (!this._mapExtent) {
+	                this._updateMapExtent();
+	            }
+	            return this._mapExtent;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * Trigger the layer load
+	     * @param lyr the layer being acted on
+	     * @param index index of the layer
+	     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+	     */
+	    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
+	        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 () { };
+	        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+	            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
+	            var _this_1 = this;
+	            callbackFunc = function () {
+	                function innerFunction(theLayer, theIndex) {
+	                    var _innerThis = this;
+	                    this._arrLyrRequest[theIndex] = $.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_1, lyr, index);
+	            };
+	        }
+	        else {
+	            lyr.clear();
+	        }
+	        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+	    };
+	    /**
+	     * trigger the map move call back at the given index
+	     * @param ind - the index of the layer
+	     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+	     * @param functionId=undefined the function id used to reference the added callback function
+	     */
+	    MapMoveCls.prototype.triggerMoveCallback = function (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 () {
+	            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  lyr - layer to add
+	     * @param triggerOnAdd - if the layer should be loaded on add
+	     */
+	    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
+	        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
+	        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);
+	        }
+	    };
+	    /**
+	     * add a callback to the map move event
+	     * @param func - callback function
+	     * @param context - the context to use for this function
+	     * @param delay=50 the delay before call load
+	     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+	     * @param functionId optional id to reference the function later for outside triggering
+	     */
+	    MapMoveCls.prototype.addCallback = function (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 = makeGuid_1.default();
+	        }
+	        this._mapMoveCallbacks.push(func);
+	        this._mapMoveCallbacksLookup[functionId] = functionId;
+	        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);
+	        }
+	    };
+	    return MapMoveCls;
+	}(mapInteractionBase_1.default));
+	exports.MapMoveCls = MapMoveCls;
+	nm.MapMoveCls = MapMoveCls;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapMoveCls;
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 12/8/2015.
+	 */
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * base interaction
+	 */
+	var MapInteractionBase = (function () {
+	    /**
+	     * map interaction base
+	     * @param subtype - the interaction subtype
+	     */
+	    function MapInteractionBase(subtype) {
+	        this._map = null;
+	        this._initialized = false;
+	        this._subtype = subtype;
+	    }
+	    /**
+	     * base initializer, returns true for already initialized
+	     * @param theMap - the ol Map
+	     * @returns true for already initialized
+	     */
+	    MapInteractionBase.prototype.init = function (theMap) {
+	        if (!this._initialized) {
+	            this._map = theMap;
+	            this._initialized = true;
+	        }
+	    };
+	    Object.defineProperty(MapInteractionBase.prototype, "map", {
+	        /**
+	         * get reference to the ol map object
+	         * @returns {ol.Map} the map object
+	         */
+	        get: function () {
+	            return this._map;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
+	        /**
+	         * get if is initialized
+	         * @returns {boolean} is initialized
+	         */
+	        get: function () {
+	            return this._initialized;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * Check the initialization status and throw exception if not valid yet
+	     * @protected
+	     */
+	    MapInteractionBase.prototype._checkInit = function () {
+	        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
+	     */
+	    MapInteractionBase.prototype.checkInit = function () {
+	        this._checkInit();
+	    };
+	    return MapInteractionBase;
+	}());
+	exports.MapInteractionBase = MapInteractionBase;
+	nm.MapInteractionBase = MapInteractionBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapInteractionBase;
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('util.checkDefined');
+	/**
+	 * check if the input is undefined or null
+	 * @param input - input pointer
+	 * @returns true undefined or null
+	 */
+	function undefinedOrNull(input) {
+	    "use strict";
+	    return (typeof input === 'undefined' || input === null);
+	}
+	exports.undefinedOrNull = undefinedOrNull;
+	nm.undefinedOrNull = undefinedOrNull;
+	/**
+	 * check if the input is defined and not null
+	 * @param input - input pointer
+	 * @returns true defined and not null
+	 */
+	function definedAndNotNull(input) {
+	    "use strict";
+	    return !(undefinedOrNull(input));
+	}
+	exports.definedAndNotNull = definedAndNotNull;
+	nm.definedAndNotNull = definedAndNotNull;
+
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('util');
+	/**
+	 * guids are used to uniquely identify groups and features
+	 * @returns {string} a new guid
+	 */
+	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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = makeGuid;
+
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var mapPopupCls_1 = __webpack_require__(13);
+	/**
+	 * The single popup object catch is that it is common to multimap pages
+	 * @type {MapPopupCls}
+	 */
+	exports.mapPopup = new mapPopupCls_1.default();
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = exports.mapPopup;
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var mapInteractionBase_1 = __webpack_require__(9);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('olHelpers');
+	var FeatureLayerProperties = (function () {
+	    /**
+	     *
+	     * @param feature the feature
+	     * @param layer - the layer in the popup
+	     * @param layerIndex - index of the layer
+	     * @param selectionLayer - the ol selection layer
+	     * @param [esriLayerName=undefined] - esri layer name
+	     */
+	    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+	        this.feature = feature;
+	        this.layer = layer;
+	        this.layerIndex = layerIndex;
+	        this.selectionLayer = selectionLayer;
+	        this.popupContent = '';
+	        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+	    }
+	    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
+	        get: function () {
+	            if (typeof this.esriLayerName == 'string') {
+	                return this.esriLayerName;
+	            }
+	            else {
+	                return this.layer.name;
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return FeatureLayerProperties;
+	}());
+	exports.FeatureLayerProperties = FeatureLayerProperties;
+	/**
+	 * map popup class
+	 * @augments MapInteractionBase
+	 */
+	var MapPopupCls = (function (_super) {
+	    __extends(MapPopupCls, _super);
+	    /**
+	     * Definition for openlayers style function
+	     * @callback olStyleFunction
+	     * &param feature the openlayers vector feature
+	     * $param
+	     */
+	    /**
+	     * map popup constructor
+	     */
+	    function MapPopupCls() {
+	        _super.call(this, 'map popup');
+	        this._arrPopupLayerIds = [];
+	        this._arrPopupLayerNames = [];
+	        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 = [];
+	        this._esriMapServiceLayers = [];
+	        this._popupOpen = false;
+	        this._popupCoordinate = null;
+	        this._passThroughLayerFeatureArray = [];
+	        this._currentPopupIndex = -1;
+	        this._popupContentLength = 0;
+	    }
+	    /**
+	     * map popup initialization
+	     * @param {ol.Map} theMap - the ol map
+	     */
+	    MapPopupCls.prototype.init = function (theMap) {
+	        var _this = this;
+	        _super.prototype.init.call(this, theMap);
+	        var $map;
+	        var target = this.map.getTarget();
+	        if (typeof target == 'string') {
+	            $map = $('#' + target);
+	        }
+	        else {
+	            $map = $(target);
+	        }
+	        $map.append('<div class="ol-popup">' +
+	            '<span class="ol-popup-closer">X</span>' +
+	            '<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 custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true,
+	            autoPanAnimation: {
+	                duration: 250,
+	                source: theMap.getView().getCenter()
+	            } });
+	        this._map.addOverlay(this._popupOverlay);
+	        this._$popupCloser.click(function (evt) {
+	            _this.closePopup();
+	        });
+	        // display popup on click
+	        this._map.on('singleclick', function (evt) {
+	            _this.closePopup();
+	            _this._popupCoordinate = evt['coordinate'];
+	            // esri map service layers
+	            if (_this._esriMapServiceLayers.length > 0) {
+	                var queryParams = {
+	                    geometry: evt['coordinate'].join(','),
+	                    geometryType: 'esriGeometryPoint',
+	                    layers: 'all',
+	                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
+	                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
+	                    imageDisplay: _this._map.getSize().join(',') + ',96',
+	                    returnGeometry: true,
+	                    tolerance: 15,
+	                    f: 'pjson'
+	                };
+	                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
+	                    var l = _a[_i];
+	                    l.getPopupInfo(queryParams);
+	                }
+	            }
+	            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
+	            _this._passThroughLayerFeatureArray = [];
+	            _this._currentPopupIndex = -1;
+	            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+	                var featObj = layerFeatureObjectArray[i];
+	                var props = featObj.feature.getProperties();
+	                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
+	                //skip if return was false
+	                if (popupContentResponse === false) {
+	                }
+	                else if (typeof popupContentResponse == 'string') {
+	                    featObj.popupContent = popupContentResponse;
+	                    _this._passThroughLayerFeatureArray.push(featObj);
+	                }
+	                else {
+	                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
+	                }
+	            }
+	            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
+	            _this._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;\">" + _this._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>';
+	            _this._$popupContent.html(popupHtml);
+	            _this._$popupContent.find('.previous-popup').click(function () {
+	                if (_this._popupContentLength == 1) {
+	                    return;
+	                }
+	                if (_this._currentPopupIndex == 0) {
+	                    _this._currentPopupIndex = _this._popupContentLength - 1;
+	                }
+	                else {
+	                    _this._currentPopupIndex--;
+	                }
+	                _this._triggerFeatSelect();
+	            });
+	            var nextPopup = _this._$popupContent.find('.next-popup');
+	            nextPopup.click(function () {
+	                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
+	                    return;
+	                }
+	                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
+	                    _this._currentPopupIndex = 0;
+	                }
+	                else {
+	                    _this._currentPopupIndex++;
+	                }
+	                _this._triggerFeatSelect();
+	            });
+	            if (_this._popupContentLength > 0) {
+	                nextPopup.trigger('click');
+	                _this._popupOverlay.setPosition(_this._popupCoordinate);
+	                _this._$popupContent.scrollTop(0);
+	                _this._popupOpen = true;
+	            }
+	        });
+	        //change mouse cursor when over marker
+	        this._map.on('pointermove', function (evt) {
+	            if (evt['dragging']) {
+	                return;
+	            }
+	            var pixel = _this.map.getEventPixel(evt['originalEvent']);
+	            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+	                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
+	                    var olLayer = _a[_i];
+	                    if (lyrCandidate == olLayer) {
+	                        return true;
+	                    }
+	                }
+	                return false;
+	            });
+	            var mapElement = _this.map.getTargetElement();
+	            mapElement.style.cursor = hit ? 'pointer' : '';
+	        });
+	        return true;
+	    };
+	    /**
+	     * helper to select features
+	     * @private
+	     */
+	    MapPopupCls.prototype._triggerFeatSelect = function () {
+	        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);
+	        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
+	            var f = _a[_i];
+	            f(this._$popupContent);
+	        }
+	    };
+	    /**
+	     *
+	     * @param feature - the ol feature
+	     * @param {LayerEsriMapServer} lyr - the map server layer
+	     * @param {string} popupContent - popup content
+	     * @param {string} esriName - esri layer name
+	     */
+	    MapPopupCls.prototype.addMapServicePopupContent = function (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++;
+	        $('.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  pixel - the ol pixel
+	     * @returns  feature layer properties
+	     * @private
+	     */
+	    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
+	        var _this = this;
+	        var layerFeatureObjectArray = [];
+	        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+	            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
+	            if (lyrIndex > -1) {
+	                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
+	            }
+	        });
+	        return layerFeatureObjectArray;
+	    };
+	    MapPopupCls.prototype.closePopup = function () {
+	        this._checkInit();
+	        this._popupOpen = false;
+	        this._popupOverlay.setPosition(undefined);
+	        this._$popupCloser[0].blur();
+	        this.clearSelection();
+	        this._$popupContent.html('');
+	        return false;
+	    };
+	    ;
+	    /**
+	     *
+	     * @param chgFunction - popup change function
+	     */
+	    MapPopupCls.prototype.addPopupChangedFunction = function (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  the new selection layer
+	     * @private
+	     */
+	    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
+	        this._checkInit();
+	        selectionStyle = selectionStyle || {};
+	        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+	        selectionStyle.width = selectionStyle.width || 10;
+	        var theStyle;
+	        if (selectionStyle.olStyle) {
+	            theStyle = selectionStyle.olStyle;
+	        }
+	        else {
+	            theStyle = new custom_ol_1.ol.style.Style({
+	                stroke: new custom_ol_1.ol.style.Stroke({
+	                    color: selectionStyle.color,
+	                    width: selectionStyle.width
+	                }),
+	                image: new custom_ol_1.ol.style.Circle({
+	                    radius: 7,
+	                    fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }),
+	                    stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 })
+	                }),
+	                fill: new custom_ol_1.ol.style.Fill({
+	                    color: selectionStyle.color
+	                })
+	            });
+	        }
+	        var selectionLayer = new custom_ol_1.ol.layer.Vector({
+	            source: new custom_ol_1.ol.source.Vector(),
+	            style: theStyle,
+	            zIndex: 100
+	        });
+	        this._selectionLayers.push(selectionLayer);
+	        this._selectionLayerLookup[lyr.id] = selectionLayer;
+	        this.map.addLayer(selectionLayer);
+	        return selectionLayer;
+	    };
+	    /**
+	     * 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
+	     */
+	    MapPopupCls.prototype.addVectorPopup = function (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;
+	    };
+	    ;
+	    /**
+	     *
+	     * @param {LayerBase} lyr - layer
+	     */
+	    MapPopupCls.prototype.removeVectorPopup = function (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
+	     */
+	    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
+	        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+	        this._esriMapServiceLayers.push(lyr);
+	        return selectionLayer;
+	    };
+	    MapPopupCls.prototype.clearSelection = function () {
+	        this._checkInit();
+	        for (var i = 0; i < this._selectionLayers.length; i++) {
+	            this._selectionLayers[i].getSource().clear();
+	        }
+	        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
+	            var f = _a[_i];
+	            f();
+	        }
+	    };
+	    ;
+	    /**
+	     * Add a function to be called when the map is clicked but before any popups are implemented
+	     * @param {function} func - the map click function
+	     */
+	    MapPopupCls.prototype.addMapClickFunction = function (func) {
+	        this._mapClickFunctions.push(func);
+	    };
+	    return MapPopupCls;
+	}(mapInteractionBase_1.default));
+	nm.MapPopupCls = MapPopupCls;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapPopupCls;
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 6/1/2016.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('collections.layerSwipe');
+	var LayerSwipe = (function () {
+	    /**
+	     *
+	     * @param {ol.Map} map - the map
+	     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
+	     */
+	    function LayerSwipe(map, sliderContent) {
+	        var _this = this;
+	        if (sliderContent === void 0) { sliderContent = ''; }
+	        sliderContent = sliderContent || '';
+	        /**
+	         *
+	         * @type {Array<LayerBase>}
+	         */
+	        this.leftLayers = [];
+	        /**
+	         *
+	         * @type {Array<LayerBase>}
+	         */
+	        this.rightLayers = [];
+	        this._percentRight = 50;
+	        this.offset = null;
+	        this._map = map;
+	        this.$mapElement = $(map.getTargetElement());
+	        this.$mapElement.append("<div class=\"layer-swiper\">" + sliderContent + "</div>");
+	        this.$swiper = this.$mapElement.find('.layer-swiper');
+	        this.percentRight = this.percentRight;
+	        this.dragging = false;
+	        this.$mapElement.mouseleave(function () {
+	            _this.dragging = false;
+	        });
+	        this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {
+	            evt.preventDefault();
+	        });
+	        this.$swiper.mousedown(function (evt) {
+	            _this.dragging = true;
+	            _this.offset = evt.offsetX;
+	        });
+	        $(window).mouseup(function () {
+	            _this.dragging = false;
+	        });
+	        this.$mapElement.mousemove(function (evt) {
+	            if (_this.dragging) {
+	                var mapLeft = _this.$mapElement.position().left;
+	                var mapWidth = _this.$mapElement.width();
+	                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;
+	            }
+	        });
+	    }
+	    /**
+	     *
+	     * @param {LayerBase|*} lyr - layer to be added to left side
+	     */
+	    LayerSwipe.prototype.addLeftLayer = function (lyr) {
+	        var _this = this;
+	        if (this.leftLayers.indexOf(lyr) != -1) {
+	            return;
+	        }
+	        lyr.olLayer.on('precompose', function (event) {
+	            var ctx = event['context'];
+	            var width = ctx.canvas.width * (_this.percentRight / 100);
+	            ctx.save();
+	            ctx.beginPath();
+	            ctx.rect(0, 0, width, ctx.canvas.height);
+	            ctx.clip();
+	        });
+	        lyr.olLayer.on('postcompose', function (event) {
+	            var ctx = event['context'];
+	            ctx.restore();
+	        });
+	        this.leftLayers.push(lyr);
+	    };
+	    /**
+	     *
+	     * @param {LayerBase|*} lyr - layer to be added to right side
+	     */
+	    LayerSwipe.prototype.addRightLayer = function (lyr) {
+	        var _this = this;
+	        if (this.rightLayers.indexOf(lyr) != -1) {
+	            return;
+	        }
+	        lyr.olLayer.on('precompose', function (event) {
+	            var ctx = event['context'];
+	            var width = ctx.canvas.width * (_this.percentRight / 100);
+	            ctx.save();
+	            ctx.beginPath();
+	            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
+	            ctx.clip();
+	        });
+	        lyr.olLayer.on('postcompose', function (event) {
+	            var ctx = event['context'];
+	            ctx.restore();
+	        });
+	        this.rightLayers.push(lyr);
+	    };
+	    Object.defineProperty(LayerSwipe.prototype, "percentRight", {
+	        get: function () {
+	            return this._percentRight;
+	        },
+	        set: function (percent) {
+	            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
+	            if (percent < 0) {
+	                return;
+	            }
+	            else if (maxed && percent > this.percentRight) {
+	                return;
+	            }
+	            this._percentRight = percent;
+	            this.$swiper.css('left', this._percentRight.toFixed(2) + "%");
+	            this._map.render();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return LayerSwipe;
+	}());
+	nm.LayerSwipe = LayerSwipe;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerSwipe;
+
+
+/***/ },
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	/**
+	 * Created by gavorhes on 12/7/2015.
+	 */
+	var LayerBase_1 = __webpack_require__(16);
+	var esriToOl = __webpack_require__(18);
+	var mapPopup_1 = __webpack_require__(12);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	/**
+	 * esri mapserver layer
+	 * @augments LayerBase
+	 */
+	var LayerEsriMapServer = (function (_super) {
+	    __extends(LayerEsriMapServer, _super);
+	    /**
+	     * 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
+	     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+	     */
+	    function LayerEsriMapServer(url, options) {
+	        if (options === void 0) { options = {}; }
+	        _super.call(this, url, options);
+	        this._source = new custom_ol_1.ol.source.TileArcGISRest({
+	            url: this.url == '' ? undefined : this.url,
+	            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
+	        });
+	        this._olLayer = new custom_ol_1.ol.layer.Tile({
+	            source: this._source,
+	            visible: this.visible,
+	            opacity: this.opacity,
+	            minResolution: this._minResolution,
+	            maxResolution: this._maxResolution,
+	            zIndex: this._zIndex
+	        });
+	        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+	        this._esriFormat = new custom_ol_1.ol.format.EsriJSON();
+	        this._popupRequest = null;
+	        this.addLegendContent();
+	        if (options.addPopup) {
+	            mapPopup_1.default.addMapServicePopup(this);
+	        }
+	    }
+	    /**
+	     * add additional content to the legend
+	     * @param {string} [additionalContent=''] additional content for legend
+	     */
+	    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
+	        var _this = this;
+	        var urlCopy = this.url;
+	        if (urlCopy[urlCopy.length - 1] !== '/') {
+	            urlCopy += '/';
+	        }
+	        urlCopy += 'legend?f=pjson&callback=?';
+	        $.get(urlCopy, {}, function (d) {
+	            var newHtml = esriToOl.makeMapServiceLegend(d);
+	            _super.prototype.addLegendContent.call(_this, newHtml);
+	        }, 'json');
+	    };
+	    LayerEsriMapServer.prototype.getPopupInfo = function (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 = $.get(urlCopy, queryParams, function (d) {
+	            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
+	                var r = _a[_i];
+	                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>';
+	                mapPopup_1.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+	            }
+	        }, 'json').always(function () {
+	            _this._popupRequest = null;
+	        });
+	    };
+	    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
+	        /**
+	         *
+	         * @returns {ol.source.TileArcGISRest} the vector source
+	         */
+	        get: function () {
+	            return _super.prototype.getSource.call(this);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
+	        /**
+	         *
+	         * @returns the ol layer
+	         */
+	        get: function () {
+	            return _super.prototype.getOlLayer.call(this);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return LayerEsriMapServer;
+	}(LayerBase_1.LayerBase));
+	exports.LayerEsriMapServer = LayerEsriMapServer;
+	nm.LayerEsriMapServer = LayerEsriMapServer;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerEsriMapServer;
+
+
+/***/ },
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var zoomResolutionConvert = __webpack_require__(17);
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	/**
+	 * 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) {
+	        if (options === void 0) { options = {}; }
+	        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 || makeGuid_1.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;
+	        /**
+	         *
+	         * @protected
+	         */
+	        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
+	     */
+	    LayerBase.prototype._load = function () {
+	        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
+	     */
+	    LayerBase.prototype.getLegendDiv = function () {
+	        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
+	     */
+	    LayerBase.prototype._addLegendContent = function (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 = $("#" + 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
+	     */
+	    LayerBase.prototype.addLegendContent = function (additionalContent) {
+	        this._addLegendContent(additionalContent);
+	    };
+	    LayerBase.prototype.applyCollapse = function () {
+	        if (this._applyCollapseCalled) {
+	            console.log('collapse already applied');
+	            return undefined;
+	        }
+	        this._$legendDiv = $("#" + 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 = $(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
+	     */
+	    LayerBase.prototype.refresh = function () {
+	        if (this.source) {
+	            this.source.refresh();
+	        }
+	    };
+	    Object.defineProperty(LayerBase.prototype, "legendContent", {
+	        /**
+	         * get the legend content
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._legendContent;
+	        },
+	        /**
+	         * set the legend content directly
+	         * @param {string} newVal - new content
+	         * @protected
+	         */
+	        set: function (newVal) {
+	            this._legendContent = newVal;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "params", {
+	        /**
+	         * get the map get params
+	         * @type {object}
+	         */
+	        get: function () {
+	            return this._params;
+	        },
+	        /**
+	         * set the map get params
+	         * @param {object} newParams - new get params
+	         * @protected
+	         */
+	        set: function (newParams) {
+	            this._params = newParams;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "minResolution", {
+	        /**
+	         * get the minimum resolution
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._minResolution;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "maxResolution", {
+	        /**
+	         * get the maximum resolution
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._maxResolution;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "minZoom", {
+	        /**
+	         * get min zoom
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._minZoom;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "maxZoom", {
+	        /**
+	         * get max zoom
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._maxZoom;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "url", {
+	        /**
+	         * get the url
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._url;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "visible", {
+	        /**
+	         * Get the layer visibility
+	         * @type {boolean}
+	         */
+	        get: function () {
+	            return this._visible;
+	        },
+	        /**
+	         * set the visibility
+	         * @param visibility
+	         */
+	        set: function (visibility) {
+	            this.setVisible(visibility);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.setVisible = function (visibility) {
+	        this._visible = visibility;
+	        if (this.olLayer) {
+	            this.olLayer.setVisible(this._visible);
+	            if (visibility && !this._loaded) {
+	                this._load();
+	            }
+	        }
+	    };
+	    Object.defineProperty(LayerBase.prototype, "opacity", {
+	        /**
+	         * Get the layer opacity
+	         * @type {number}
+	         */
+	        get: function () {
+	            return this._opacity;
+	        },
+	        /**
+	         * Set the layer opacity
+	         * @param {number} opacity - layer opacity
+	         */
+	        set: function (opacity) {
+	            this._opacity = opacity;
+	            if (this.olLayer) {
+	                this.olLayer.setOpacity(this._opacity);
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "name", {
+	        /**
+	         * Get the layer name
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._name;
+	        },
+	        /**
+	         * set the layer name
+	         * @param {string} newName - the new name
+	         */
+	        set: function (newName) {
+	            this._name = newName;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "loaded", {
+	        /**
+	         * Check if the layer is loaded
+	         * @type {boolean}
+	         */
+	        get: function () {
+	            return this._loaded;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "source", {
+	        /**
+	         * get the layer source
+	         * @type {*}
+	         */
+	        get: function () {
+	            return this.getSource();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.getSource = function () {
+	        return this._source;
+	    };
+	    Object.defineProperty(LayerBase.prototype, "zIndex", {
+	        /**
+	         * get the z index
+	         */
+	        get: function () {
+	            return this._zIndex;
+	        },
+	        /**
+	         * set the z index
+	         */
+	        set: function (newZ) {
+	            this._zIndex = newZ;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.setZIndex = function (newZ) {
+	    };
+	    Object.defineProperty(LayerBase.prototype, "olLayer", {
+	        /**
+	         * the the ol layer
+	         */
+	        get: function () {
+	            return this.getOlLayer();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.getOlLayer = function () {
+	        return this._olLayer;
+	    };
+	    return LayerBase;
+	}());
+	exports.LayerBase = LayerBase;
+	nm.LayerBase = LayerBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerBase;
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/14/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('olHelpers.zoomResolutionConvert');
+	var _zoomResLookup = [
+	    156543.03392804097,
+	    78271.51696402048,
+	    39135.75848201024,
+	    19567.87924100512,
+	    9783.93962050256,
+	    4891.96981025128,
+	    2445.98490512564,
+	    1222.99245256282,
+	    611.49622628141,
+	    305.748113140705,
+	    152.8740565703525,
+	    76.43702828517625,
+	    38.21851414258813,
+	    19.109257071294063,
+	    9.554628535647032,
+	    4.777314267823516,
+	    2.388657133911758,
+	    1.194328566955879,
+	    0.5971642834779395,
+	    0.29858214173896974,
+	    0.14929107086948487,
+	    0.07464553543474244,
+	    0.03732276771737122,
+	    0.01866138385868561,
+	    0.009330691929342804,
+	    0.004665345964671402,
+	    0.002332672982335701,
+	    0.0011663364911678506,
+	    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;
+	    }
+	}
+	exports.zoomToResolution = zoomToResolution;
+	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;
+	}
+	exports.resolutionToZoom = resolutionToZoom;
+	nm.resolutionToZoom = resolutionToZoom;
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	/**
+	 * Created by gavorhes on 1/4/2016.
+	 */
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.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 = (function () {
+	    /**
+	     *
+	     * @param symbolObj
+	     * @param {number} opacity
+	     */
+	    function CommonSymbol(symbolObj, opacity) {
+	        this.symbolObj = symbolObj;
+	        this.opacity = opacity;
+	        this.olStyle = undefined;
+	        this.legendHtml = '';
+	    }
+	    return CommonSymbol;
+	}());
+	var PointSymbol = (function (_super) {
+	    __extends(PointSymbol, _super);
+	    function PointSymbol(symbolObj, opacity) {
+	        _super.call(this, symbolObj, opacity);
+	        switch (this.symbolObj.type) {
+	            case 'esriSMS':
+	                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+	                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+	                var outlineWidth = this.symbolObj.outline.width;
+	                var radius = this.symbolObj.size;
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    image: new custom_ol_1.ol.style.Circle({
+	                        radius: radius,
+	                        fill: new custom_ol_1.ol.style.Fill({
+	                            color: innerColor
+	                        }),
+	                        stroke: new custom_ol_1.ol.style.Stroke({ color: outerColor, width: outlineWidth })
+	                    })
+	                });
+	                this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
+	                break;
+	            case 'esriPMS':
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    image: new custom_ol_1.ol.style.Icon({ src: "data:image/png;base64," + this.symbolObj['imageData'] })
+	                });
+	                this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + this.symbolObj['imageData'] + "\">";
+	                break;
+	            default:
+	                console.log(this.symbolObj);
+	                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);
+	        }
+	    }
+	    return PointSymbol;
+	}(CommonSymbol));
+	var LineSymbol = (function (_super) {
+	    __extends(LineSymbol, _super);
+	    function LineSymbol(symbolObj, opacity) {
+	        _super.call(this, symbolObj, opacity);
+	        switch (this.symbolObj.type) {
+	            case 'esriSLS':
+	                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+	                var lineWidth = this.symbolObj.width;
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    stroke: new custom_ol_1.ol.style.Stroke({
+	                        color: innerColor,
+	                        //lineDash: [4],
+	                        width: lineWidth
+	                    })
+	                });
+	                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+	                this.legendHtml += "style=\"";
+	                this.legendHtml += "background-color: " + innerColor + ";";
+	                this.legendHtml += "width: 40px;";
+	                this.legendHtml += "height: 4px;";
+	                this.legendHtml += "position: relative;";
+	                this.legendHtml += "display: inline-block;";
+	                this.legendHtml += "top: -1px;";
+	                this.legendHtml += "\"></span>";
+	                break;
+	            default:
+	                console.log(this.symbolObj);
+	                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);
+	        }
+	    }
+	    return LineSymbol;
+	}(CommonSymbol));
+	var PolygonSymbol = (function (_super) {
+	    __extends(PolygonSymbol, _super);
+	    function PolygonSymbol(symbolObj, opacity) {
+	        _super.call(this, symbolObj, opacity);
+	        switch (this.symbolObj['type']) {
+	            case 'esriSFS':
+	                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+	                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+	                var outlineWidth = this.symbolObj.outline.width;
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    stroke: new custom_ol_1.ol.style.Stroke({
+	                        color: outerColor,
+	                        //lineDash: [4],
+	                        width: outlineWidth
+	                    }),
+	                    fill: new custom_ol_1.ol.style.Fill({
+	                        color: innerColor
+	                    })
+	                });
+	                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+	                this.legendHtml += "style=\"";
+	                this.legendHtml += "background-color: " + innerColor + ";";
+	                this.legendHtml += "border: solid " + outerColor + " 1px;";
+	                this.legendHtml += "width: 40px;";
+	                this.legendHtml += "height: 9px;";
+	                this.legendHtml += "position: relative;";
+	                this.legendHtml += "display: inline-block;";
+	                this.legendHtml += "top: 2px;";
+	                this.legendHtml += "\"></span>";
+	                break;
+	            default:
+	                console.log(this.symbolObj);
+	                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);
+	        }
+	    }
+	    return PolygonSymbol;
+	}(CommonSymbol));
+	var SymbolGenerator = (function () {
+	    function SymbolGenerator(esriResponse) {
+	        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
+	        this.renderer = esriResponse.drawingInfo.renderer;
+	        this.olStyle = undefined;
+	        this.legendHtml = '';
+	    }
+	    return SymbolGenerator;
+	}());
+	var SingleSymbol = (function (_super) {
+	    __extends(SingleSymbol, _super);
+	    /**
+	     *
+	     * @param {object} esriResponse - layer info
+	     * @param {Constructor|*} SymbolClass - the symbol class to use
+	     */
+	    function SingleSymbol(esriResponse, SymbolClass) {
+	        _super.call(this, esriResponse);
+	        this.symbol = this.renderer.symbol;
+	        var symbolObj = new SymbolClass(this.symbol, this.opacity);
+	        this.olStyle = symbolObj.olStyle;
+	        this.legendHtml = symbolObj.legendHtml;
+	    }
+	    return SingleSymbol;
+	}(SymbolGenerator));
+	var UniqueValueSymbol = (function (_super) {
+	    __extends(UniqueValueSymbol, _super);
+	    /**
+	     *
+	     * @param {object} esriResponse - layer info
+	     * @param {Constructor|*} SymbolClass - the Symbol class definition
+	     */
+	    function UniqueValueSymbol(esriResponse, SymbolClass) {
+	        var _this = this;
+	        _super.call(this, esriResponse);
+	        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];
+	        this.propertyName = this.renderer['field1'];
+	        this.defaultSymbol = this.renderer['defaultSymbol'];
+	        if (this.defaultSymbol) {
+	            var symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
+	            this.defaultStyle = symbolObj.olStyle;
+	            this.defaultLabelHtml = ("<span class=\"legend-layer-subitem\">" + htmlEscape(this.renderer['defaultLabel']) + "</span>") + symbolObj.legendHtml;
+	        }
+	        else {
+	            this.defaultStyle = undefined;
+	            this.defaultLabelHtml = 'other';
+	        }
+	        this.valueArray = [];
+	        this.labelArray = [];
+	        this.legendArray = [];
+	        this.propertyStyleLookup = {};
+	        for (var _i = 0, _a = this.uniqueValueInfos; _i < _a.length; _i++) {
+	            var uniqueVal = _a[_i];
+	            this.labelArray.push(uniqueVal['label']);
+	            this.valueArray.push(uniqueVal['value']);
+	            var uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
+	            this.legendArray.push(("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>") + uniqueSym.legendHtml);
+	            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+	        }
+	        this.olStyle = function (feature) {
+	            var checkProperties = feature.getProperties();
+	            var checkProperty = checkProperties[_this.propertyName];
+	            var returnValue;
+	            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
+	                returnValue = [_this.propertyStyleLookup[checkProperty]];
+	            }
+	            else {
+	                returnValue = [_this.defaultStyle];
+	            }
+	            return returnValue;
+	        };
+	        if (this.defaultLabelHtml !== null) {
+	            this.legendArray.push(this.defaultLabelHtml);
+	        }
+	        this.legendHtml = '<ul>';
+	        for (var _b = 0, _c = this.legendArray; _b < _c.length; _b++) {
+	            var h = _c[_b];
+	            this.legendHtml += "<li>" + h + "</li>";
+	        }
+	        this.legendHtml += '</ul>';
+	    }
+	    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 };
+	    }
+	}
+	exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+	nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+	/**
+	 *
+	 * @param {object} lyrObject - the layer as defined in the response
+	 * @param {boolean} [skipLayerNameAndExpander=false] use only icons
+	 * @returns {string} legend html
+	 */
+	function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
+	    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }
+	    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;
+	    var layerName = lyrObject['layerName'];
+	    var legendItems = lyrObject['legend'];
+	    var legendHtml = '';
+	    if (!skipLayerNameAndExpander) {
+	        legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>";
+	    }
+	    if (legendItems.length == 1) {
+	        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
+	    }
+	    else {
+	        if (!skipLayerNameAndExpander) {
+	            legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>';
+	        }
+	        legendHtml += '<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 (!skipLayerNameAndExpander) {
+	        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;
+	}
+	exports.makeMapServiceLegend = makeMapServiceLegend;
+	nm.makeMapServiceLegend = makeMapServiceLegend;
+
+
+/***/ }
+/******/ ]);
+//# sourceMappingURL=compare-test.js.map
\ No newline at end of file
diff --git a/test-html/js/compare-test.js.map b/test-html/js/compare-test.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..7587d2f627f892da77f9b79b4b708545914570a6
--- /dev/null
+++ b/test-html/js/compare-test.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8","webpack:///./src-ts/_test/compare-test.ts","webpack:///./src-ts/olHelpers/quickMap.ts","webpack:///./src-ts/olHelpers/quickMapBase.ts","webpack:///./~/jquery/dist/jquery.js","webpack:///./src-ts/util/provide.ts","webpack:///./~/custom-ol/lib/index.js","webpack:///./~/custom-ol/ol/ol-build.js","webpack:///./src-ts/olHelpers/mapMove.ts","webpack:///./src-ts/olHelpers/mapMoveCls.ts","webpack:///./src-ts/olHelpers/mapInteractionBase.ts","webpack:///./src-ts/util/checkDefined.ts","webpack:///./src-ts/util/makeGuid.ts","webpack:///./src-ts/olHelpers/mapPopup.ts","webpack:///./src-ts/olHelpers/mapPopupCls.ts","webpack:///./src-ts/olHelpers/layerSwipe.ts","webpack:///./src-ts/layers/LayerEsriMapServer.ts","webpack:///./src-ts/layers/LayerBase.ts","webpack:///./src-ts/olHelpers/zoomResolutionConvert.ts","webpack:///./src-ts/olHelpers/esriToOlStyle.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACtCA;;IAEG;AACH,sCAAuB,CAAuB,CAAC;AAC/C,wCAAuB,EAAyB,CAAC;AACjD,gDAAiC,EAA8B,CAAC;AAEhE,KAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAGrB,KAAI,MAAM,GAAG,IAAI,oBAAU,CAAC,GAAG,CAAC,CAAC;AAGjC,KAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,8GAA8G,EAC9G;KACI,OAAO,EAAE,CAAC;KACV,OAAO,EAAE,EAAE;KACX,IAAI,EAAE,gBAAgB;EACzB,CAAC,CAAC;AAEP,KAAI,mBAAmB,GAAG,IAAI,uCAAkB,CAC5C,0GAA0G,EAC1G;KACI,OAAO,EAAE,CAAC;KACV,OAAO,EAAE,IAAI;KACb,IAAI,EAAE,sBAAsB;EAC/B,CAAC,CAAC;AAEP,KAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,oGAAoG,EACpG;KACI,OAAO,EAAE,CAAC;KACV,OAAO,EAAE,IAAI;KACb,IAAI,EAAE,WAAW;KACjB,UAAU,EAAE,CAAC,CAAC,CAAC;EAClB,CAAC,CAAC;AAEP,KAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,oGAAoG,EACpG;KACI,OAAO,EAAE,CAAC;KACV,OAAO,EAAE,IAAI;KACb,IAAI,EAAE,WAAW;KACjB,UAAU,EAAE,CAAC,CAAC,CAAC;EAClB,CAAC,CAAC;AAEP,IAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,IAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,IAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,IAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAG1C,OAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACnC,OAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAE1C,OAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACpC,OAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;;;;;;;ACzDrC;;IAEG;;AAEH,0CAA4C,CAAgB,CAAC;AAC7D,qCAAoB,CAAiB,CAAC;AACtC,qCAAoB,CAAW,CAAC;AAChC,sCAAqB,EAAY,CAAC;AAClC,KAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAG9B;;;;;;;;;;;;;;;IAeG;AACH,mBAAyB,OAA0B;KAC/C,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;KAC9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAChB,kBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAEjB,MAAM,CAAC,CAAC,CAAC;AACb,EAAC;AANe,iBAAQ,WAMvB;AAGD,GAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB;mBAAe,QAAQ,CAAC;;;;;;;ACrCxB;;IAEG;;AAEH,KAAM,CAAC,GAAG,mBAAO,CAAC,CAAQ,CAAC,CAAC;AAC5B,qCAAoB,CAAiB,CAAC;AACtC,uCAAiB,CAAW,CAAC;AAC7B,KAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAahC;;;;;;;;;;;;;;;IAeG;AACH,uBAA6B,OAAyB;KAClD,OAAO,GAAG,OAAO,IAAI,EAAqB,CAAC;KAC3C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;KACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAC,CAAC;KAC9D,OAAO,CAAC,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;KAClE,OAAO,CAAC,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;KAC9F,OAAO,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;KAGzF,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;KACrC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KAEpC,IAAI,QAAQ,GAAG,IAAI,cAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,cAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,CAAC,CAAC;KAChE,sGAAsG;KAEtG,IAAI,MAAM,GAAG,m0GAAm0G,CAAC;KACj1G,IAAI,SAAS,GAAG,+uIAA+uI,CAAC;KAEhwI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;KAkB3B,CAAC;KAED,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;SACxC,MAAM,mBAAmB,CAAC;KAC9B,CAAC;KAED,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC3G,IAAI,CAAC,GAAG,IAAI,cAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;SAE5C,CAAC,CAAC,SAAS,CAAC,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC;SACtG,IAAI,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;SACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;SAClC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;KACtC,CAAC;KAED,IAAI,GAAG,GAAG,IAAI,cAAE,CAAC,GAAG,CAAC;SACjB,MAAM,EAAE,CAAC,QAAQ,CAAC;SAClB,MAAM,EAAE,OAAO,CAAC,KAAK;SACrB,QAAQ,EAAE,cAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC1B,kBAAkB,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC;UAC3C,CAAC;SACF,IAAI,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC;aACd,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;aAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;aAClB,OAAO,EAAE,OAAO,CAAC,OAAO;aACxB,OAAO,EAAE,OAAO,CAAC,OAAO;UAC3B,CAAC;MACL,CAAC,CAAC;KAEH,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;SACrB,oCAAoC;SACpC,GAAG,CAAC,UAAU,CAAC,IAAI,cAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;KAED,MAAM,CAAC,GAAG,CAAC;AACf,EAAC;AAxEe,qBAAY,eAwE3B;AAED,GAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;mBAAe,YAAY,CAAC;;;;;;;AC/G5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDA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","file":"compare-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nimport {quickMap} from '../olHelpers/quickMap';\r\nimport LayerSwipe from '../olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap();\r\n\r\n\r\nlet swiper = new LayerSwipe(map);\r\n\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer',\r\n    {\r\n        minZoom: 6,\r\n        maxZoom: 12,\r\n        name: 'WisDOT Regions'\r\n    });\r\n\r\nlet metamanagerSegments = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'Metamanager Segments'\r\n    });\r\n\r\nlet truckSpeed2014 = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2014',\r\n        showLayers: [8]\r\n    });\r\n\r\nlet truckSpeed2015 = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2015',\r\n        showLayers: [9]\r\n    });\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(truckSpeed2014.olLayer);\r\nmap.addLayer(truckSpeed2015.olLayer);\r\nmap.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\nswiper.addLeftLayer(wisDotRegions);\r\nswiper.addRightLayer(metamanagerSegments);\r\n\r\nswiper.addLeftLayer(truckSpeed2014);\r\nswiper.addRightLayer(truckSpeed2015);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/compare-test.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, 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\nimport {ol} from 'custom-ol'\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 the ol map\r\n */\r\nexport function quickMap(options? : quickMapOptions): ol.Map {\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\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 [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options?: quickMapOptions): ol.Map {\r\n    options = options || {} as quickMapOptions;\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, 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        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"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],\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        //TODO add full screen options to ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMapBase.ts\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\"use strict\";\r\nexports.ol = require('../ol/ol-build');\r\n// // export default require('../ol/ol-build');\r\n//\r\n// const fish = 10;\r\n// export = fish;\r\n//\r\n//\r\n// export function cat(bird: string){\r\n//     console.log('eat the fish')\r\n// }\r\n//\r\n// export function nice(eat: number){\r\n//     console.log('eat that fish');\r\n// }\r\n//\r\n// export class Big{\r\n//     glenn: string;\r\n//\r\n//     constructor(isGlenn){\r\n//         this.glenn  = isGlenn;\r\n//     }\r\n//\r\n//     set isGlenn(f: string){\r\n//         console.log(this.glenn)\r\n//     }\r\n//\r\n//     run(){\r\n//         console.log(this.glenn + \" can run\");\r\n//     }\r\n// }\r\n//\r\n// export namespace HereIt{\r\n//\r\n//     export class Big2 {\r\n//         glenn: string;\r\n//\r\n//         constructor(isGlenn) {\r\n//             this.glenn = isGlenn;\r\n//         }\r\n//\r\n//         set isGlenn(f: string) {\r\n//             console.log(this.glenn)\r\n//         }\r\n//\r\n//         run() {\r\n//             console.log(this.glenn + \" can run\");\r\n//         }\r\n//     }\r\n//\r\n//\r\n// } \r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/lib/index.js\n ** module id = 5\n ** module chunks = 1 2 5\n **/","// OpenLayers 3. See http://openlayers.org/\r\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\r\n;(function (root, factory) {\r\n  if (typeof exports === \"object\") {\r\n    module.exports = factory();\r\n  } else if (typeof define === \"function\" && define.amd) {\r\n    define([], factory);\r\n  } else {\r\n    root.ol = factory();\r\n  }\r\n}(this, function () {\r\n  var OPENLAYERS = {};\r\n  var n,aa=this;\r\nfunction ba(){var a=aa.setImmediate,b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}\r\nfunction ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split(\".\"),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript(\"var \"+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if(\"undefined\"!==typeof window)var K=window;else\"undefined\"!==typeof global?K=global:\"undefined\"!==typeof self&&(K=self);function ha(a){this.message=\"Assertion failed. See /doc/errors/#\"+a+\" for details.\";this.code=a;this.name=\"AssertionError\"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;\"cosh\"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa=\"function\"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}\r\nfunction xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}\r\nfunction M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c=\"deleteIndex\"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c=\"string\"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};\r\nfunction Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,\"change\")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]=\"change:\"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja(\"propertychange\",a,c))))};\r\nV.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}\r\nfunction Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}\r\nfunction jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}\r\nfunction nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}\r\nfunction ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}\r\nfunction qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/*\r\n\r\n Latitude/longitude spherical geodesy formulae taken from\r\n http://www.movable-type.co.uk/scripts/latlong.html\r\n Licensed under CC-BY-3.0.\r\n*/\r\nfunction Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}\r\nAb.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db[\"us-ft\"]=1200/3937;\r\nfunction Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if(\"function\"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);\r\nelse{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if(\"degrees\"==this.a)return a;var c=Mb(this,Hb(\"EPSG:4326\")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};\r\nEb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?\"string\"===typeof a?Hb(a):a:Hb(\"EPSG:3857\")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}\r\nfunction Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if(\"string\"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&\"function\"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}\r\nfunction Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c=\"XY\";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;\"XY\"==a?b=2:\"XYZ\"==a||\"XYM\"==a?b=3:\"XYZM\"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};\r\nn.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c=\"XY\";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e=\"XY\":3==c?e=\"XYZ\":4==c&&(e=\"XYZM\");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};\r\nn.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};\r\nn.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=\r\na[b+m*d],f[g++]=a[b+m*d+1]);return g}\r\nfunction hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=\r\nz,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LinearRing\"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return\"Point\"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,\"XY\",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}\r\nfunction oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}\r\nfunction sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,\"XY\",b,c);return a};n.$=function(){return\"Polygon\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,\"XY\",null,this.ja)};\r\nfunction rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;\r\nvoid 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:\"number\"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,\r\na.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};\r\nfunction yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};\r\nn.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,\"XY\",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),\r\nl=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};\r\nn.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc=\"center\",wc=\"resolution\",xc=\"rotation\";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}\r\nfunction Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}\r\nfunction Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:\r\nthis.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};\r\nMc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}\r\nfunction Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}\r\nfunction Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get(\"length\");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get(\"length\")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};\r\nfunction fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set(\"length\",a.a.length)}var hd=\"add\",id=\"remove\";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ld=/^(?: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,md=/^([a-z]*)$/i;function nd(a){if(\"string\"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a=\"rgba(\"+b+\",\"+c+\",\"+d+\",\"+(void 0===a[3]?1:a[3])+\")\"}return a}\r\nvar pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement(\"div\"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,\r\nd=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return\"string\"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=\"\"}function xd(a){return-1!=ud.indexOf(a)};var yd=xd(\"Opera\"),zd=xd(\"Trident\")||xd(\"MSIE\"),Ad=xd(\"Edge\"),Bd=xd(\"Gecko\")&&!(-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"))&&!(xd(\"Trident\")||xd(\"MSIE\"))&&!xd(\"Edge\"),Cd=-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"),Dd;\r\na:{var Ed=\"\",Fd=function(){var a=ud;if(Bd)return/rv\\:([^\\);]+)(\\)|;)/.exec(a);if(Ad)return/Edge\\/([\\d\\.]+)/.exec(a);if(zd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Cd)return/WebKit\\/(\\S+)/.exec(a);if(yd)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:\"\");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement(\"CANVAS\");a&&(c.width=a);b&&(c.height=b);return c.getContext(\"2d\")}\r\nvar Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),c,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate(1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),\r\nc,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate3d(1px,1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}();\r\nfunction Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id[\"9.0\"])){for(var c=0,d=rd(String(Dd)).split(\".\"),e=rd(\"9.0\").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 p=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==\r\np[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id[\"9.0\"]=0<=c}c&&(a.style.transformOrigin=\"0 0\")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,\"matrix(\"+d.join(\",\")+\")\")}else a.style.left=Math.round(b[4])+\"px\",a.style.top=Math.round(b[5])+\"px\"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}\r\nfunction Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D=\"string\"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};\r\nUd.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,\"postrender\",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.B.appendChild(this.j);this.j.style.display=\"none\";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:\"ol-attribution\",c=void 0!==a.tipLabel?a.tipLabel:\"Attributions\",d=void 0!==a.collapseLabel?a.collapseLabel:\"\\u00bb\";\"string\"===typeof d?(this.h=document.createElement(\"span\"),this.h.textContent=d):this.h=\r\nd;d=void 0!==a.label?a.label:\"i\";\"string\"===typeof d?(this.s=document.createElement(\"span\"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement(\"button\");d.setAttribute(\"type\",\"button\");d.title=c;d.appendChild(e);R(d,\"click\",this.P,this);c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\"+(this.g&&this.v?\" ol-collapsed\":\"\")+(this.v?\"\":\" ol-uncollapsible\");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?\r\na.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);\r\nfunction Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+\r\n1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display=\"\",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display=\"none\",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement(\"LI\"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=\r\nd,this.a[A]=!0;for(A in b)d=document.createElement(\"LI\"),d.innerHTML=b[A].a,d.style.display=\"none\",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?\"\":\"none\",this.u=A);A&&sa(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,\"\"===\r\nb?c=F:(c=document.createElement(\"a\"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?\"none\":\"\"}else this.u&&(this.element.style.display=\"none\",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:\"ol-full-screen\";var b=void 0!==a.label?a.label:\"\\u2922\";this.g=\"string\"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:\"\\u00d7\";this.h=\"string\"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:\"Toggle full-screen\",b=document.createElement(\"button\");b.className=this.a+\"-\"+Yd();b.setAttribute(\"type\",\"button\");b.title=c;b.appendChild(this.g);R(b,\"click\",this.v,this);c=document.createElement(\"div\");\r\nc.className=this.a+\" ol-unselectable ol-control \"+(Zd()?\"\":\"ol-unsupported\");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);\r\nXd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?\"string\"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):\r\n$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+\"-true\",Rd(this.h,this.g)):(a.className=this.a+\"-false\",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};\r\nfunction Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}\r\nfunction $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a=\"webkitfullscreenchange\":b.mozRequestFullScreen?a=\"mozfullscreenchange\":b.msRequestFullscreen?a=\"MSFullscreenChange\":b.requestFullscreen&&(a=\"fullscreenchange\")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-rotate\",c=void 0!==a.label?a.label:\"\\u21e7\";this.a=null;\"string\"===typeof c?(this.a=document.createElement(\"span\"),this.a.className=\"ol-compass\",this.a.textContent=c):(this.a=c,this.a.classList.add(\"ol-compass\"));var d=a.tipLabel?a.tipLabel:\"Reset rotation\",c=document.createElement(\"button\");c.className=b+\"-reset\";c.setAttribute(\"type\",\"button\");c.title=d;c.appendChild(this.a);R(c,\"click\",be.prototype.s,this);d=document.createElement(\"div\");\r\nd.className=b+\" ol-unselectable ol-control\";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add(\"ol-hidden\")}B(be,Ud);\r\nbe.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};\r\nfunction ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b=\"rotate(\"+a+\"rad)\";if(this.c){var c=this.element.classList.contains(\"ol-hidden\");c||0!==a?c&&0!==a&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-zoom\",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:\"+\",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:\"\\u2212\",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:\"Zoom in\",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:\"Zoom out\",h=document.createElement(\"button\");h.className=b+\"-in\";h.setAttribute(\"type\",\"button\");h.title=f;h.appendChild(\"string\"===typeof d?document.createTextNode(d):d);R(h,\"click\",de.prototype.c.bind(this,\r\nc));d=document.createElement(\"button\");d.className=b+\"-out\";d.setAttribute(\"type\",\"button\");d.title=g;d.appendChild(\"string\"===typeof e?document.createTextNode(e):e);R(d,\"click\",de.prototype.c.bind(this,-c));c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);\r\nde.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;\r\nfunction ge(){var a=aa.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!xd(\"Presto\")&&(a=function(){var a=document.createElement(\"IFRAME\");a.style.display=\"none\";a.src=\"\";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write(\"\");a.close();var c=\"callImmediate\"+Math.random(),d=\"file:\"==b.location.protocol?\"*\":b.location.protocol+\"//\"+b.location.host,a=ea(function(a){if((\"*\"==d||a.origin==d)&&a.data==\r\nc)this.port1.onmessage()},this);b.addEventListener(\"message\",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if(\"undefined\"!==typeof a&&!xd(\"Trident\")&&!xd(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(a){var b=document.createElement(\"SCRIPT\");\r\nb.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",le=-1!==ke.indexOf(\"firefox\"),me=-1!==ke.indexOf(\"safari\")&&-1===ke.indexOf(\"chrom\"),ne=-1!==ke.indexOf(\"macintosh\"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!(\"HTMLCanvasElement\"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re=\"ontouchstart\"in K,se=\"PointerEvent\"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];\r\nif(\"WebGLRenderingContext\"in K)try{var we=ie(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType=\"mouse\";return b}n=ye.prototype;\r\nn.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};\r\nn.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}B(Je,xe);function Ke(a,b){var c=b;\"number\"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};\r\nn.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le(\"lostpointercapture\",a,a))};n.Vd=function(a){U(this.b,new Le(\"gotpointercapture\",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles=\"bubbles\"in a?a.bubbles:!1;this.cancelable=\"cancelable\"in a?a.cancelable:!1;this.view=\"view\"in a?a.view:null;this.detail=\"detail\"in a?a.detail:null;this.screenX=\"screenX\"in a?a.screenX:0;this.screenY=\"screenY\"in a?a.screenY:0;this.clientX=\"clientX\"in a?a.clientX:0;this.clientY=\"clientY\"in a?a.clientY:0;this.button=\"button\"in a?a.button:0;this.relatedTarget=\"relatedTarget\"in a?a.relatedTarget:\r\nnull;this.pointerId=\"pointerId\"in a?a.pointerId:0;this.width=\"width\"in a?a.width:0;this.height=\"height\"in a?a.height:0;this.pointerType=\"pointerType\"in a?a.pointerType:\"\";this.isPrimary=\"isPrimary\"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}\r\nvar Qe=!1;try{Qe=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};\r\nfunction Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType=\"touch\";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}\r\nfunction Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}\r\nn.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};\r\nn.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};\r\nn.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};\r\nfunction Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};\r\nfunction $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}\r\nfunction He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};\r\nvar Fe=\"pointermove\",Ee=\"pointerdown\",Ge=\"pointerup\",Ve=\"pointerover\",cf=\"pointerout\",We=\"pointerenter\",Xe=\"pointerleave\",De=\"pointercancel\",bf=[[\"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\",\r\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);\r\nfunction ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}\r\nfunction lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};\r\nn.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};\r\nn.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf=\"singleclick\",hf=\"click\",jf=\"dblclick\",qf=\"pointerdrag\",pf=\"pointermove\",of=\"pointerdown\",mf=\"pointerup\",nf=\"pointercancel\",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:\"pointerover\",Me:\"pointerout\",Je:\"pointerenter\",Ke:\"pointerleave\",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);\r\nfunction tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get(\"maxResolution\"),h=a.get(\"minResolution\");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get(\"extent\")};n.Xb=function(){return this.get(\"opacity\")};n.gb=function(){return this.get(\"visible\")};n.Yb=function(){return this.get(\"zIndex\")};n.Bc=function(a){this.set(\"opacity\",a)};n.Cc=function(a){this.set(\"visible\",a)};\r\nn.Dc=function(a){this.set(\"zIndex\",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:\"ready\";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if(\"string\"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]=\"string\"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};\r\nvf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La(\"source\"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get(\"source\")||null};n.Sb=function(){var a=this.da();return a?a.T():\"undefined\"};n.fe=function(){this.w()};\r\nn.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,\"change\",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,\"precompose\",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,\"change\",a.render,a),this.w())};n.$b=function(a){this.set(\"source\",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+\":\"+a+\":\"+(c?nd(c):\"null\");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+\":\"+a+\":\"+(c?nd(c):\"null\")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}\r\nfunction Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}\r\nfunction Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}\r\nn.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};\r\nn.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,\"change\",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}\r\nfunction Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=\"\"}B(Sf,Ga);function Tf(a){U(a,\"change\")}Sf.prototype.getKey=function(){return this.key+\"/\"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};\r\nfunction Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],\"change\",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,\"change\",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set(\"active\",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}\r\nfunction eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return\"INPUT\"!==a&&\"SELECT\"!==a&&\"TEXTAREA\"!==a}function mg(a){L(a.b,56);return\"mouse\"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}\r\nfunction og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}\r\nfunction tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();\r\nzc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}\r\nfunction yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement(\"div\");this.a.style.position=\"absolute\";this.a.className=\"ol-box \"+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+\"px\";a.top=Math.min(b[1],c[1])+\"px\";a.width=Math.abs(c[0]-b[0])+\"px\";a.height=Math.abs(c[1]-b[1])+\"px\"}\r\nzg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height=\"inherit\"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||\"ol-dragbox\");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}\r\nfunction Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxdrag\",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg(\"boxend\",a.coordinate,a)));return!1}\r\nfunction Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxstart\",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||\"ol-dragzoom\"})}B(Ig,Dg);\r\nIg.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);\r\nfunction Kg(a){var b=!1;if(\"keydown\"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if(\"keydown\"==a.type||\"keypress\"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);\r\nfunction Og(a){var b=!1;if(\"wheel\"==a.type||\"mousewheel\"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;\"wheel\"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):\"mousewheel\"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}\r\nNg.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);\r\nfunction Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}\r\nfunction Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}\r\nfunction Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La(\"layers\"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set(\"layers\",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};\r\nn.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get(\"layers\");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,\"propertychange\",this.rb,this),R(d,\"change\",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,\"propertychange\",this.rb,this),R(a,\"change\",this.rb,this)];this.w()};\r\nn.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get(\"layers\"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return\"ready\"};function Yg(a){Eb.call(this,{code:a,units:\"m\",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh=\"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(a){return new Yg(a)});\r\nfunction ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:\"degrees\",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};\r\nvar gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh(\"CRS:84\"),new fh(\"EPSG:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new fh(\"urn:ogc:def:crs:OGC:2:84\"),new fh(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new fh(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set(\"preload\",void 0!==a.preload?a.preload:0);this.set(\"useInterimTilesOnError\",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get(\"useInterimTilesOnError\")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));\r\nelse{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):\"-\",h=this.g?rh(this.g):\"-\";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=[\"c\"+f+h+(void 0!==this.a?this.a.toString():\"-\"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?\r\na.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;\r\nn.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};\r\nn.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():\"f\"+(a.b?nd(a.b):\"-\"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();\r\nfunction vh(a,b,c){c||(c=0);var d=Array(16);if(\"string\"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=\r\nc+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>\r\n20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|\r\ng>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|\r\ng>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|\r\ng>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^\r\nb^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;\r\nf=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+\r\n(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;\r\nc=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}\r\nfunction wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if(\"string\"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}\r\nfunction qh(a){if(void 0===a.l){var b=\"s\"+(a.a?nd(a.a):\"-\")+\",\"+(void 0!==a.f?a.f.toString():\"-\")+\",\"+(a.b?a.b.toString():\"-\")+\",\"+(void 0!==a.g?a.g:\"-\")+\",\"+(void 0!==a.h?a.h.toString():\"-\")+\",\"+(void 0!==a.c?a.c.toString():\"-\"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,\r\nd);else for(c=\"\",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){\"function\"===typeof b?a.c=b:\"string\"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}\r\nfunction Bh(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:\"rgba(255,255,255,0.4)\"}),b=new xh({color:\"#3399CC\",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}\r\nfunction Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,\r\na.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c=\"\";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);\r\nfunction Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}\r\nfunction Ih(a,b,c,d){var e=0;if(a.ca&&\"\"!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+\r\na.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;\r\nn.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}\"\"!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};\r\nn.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}\"\"!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};\r\nn.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}\"\"!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}\"\"!==this.c&&(a=tc(a),Ih(this,a,2,2))}};\r\nn.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}\"\"!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}\r\nfunction Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=\r\nb.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}\r\nn.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};\r\nn.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};\r\nn.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==a?a:\"middle\"};this.c=void 0!==\r\nh?h:\"\";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=\"\"};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&\"ready\"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}\r\nfunction Wh(a,b){var c=b.D;void 0!==c&&(\"string\"===typeof c?a.logos[c]=\"\":c&&(L(\"string\"==typeof c.href,44),L(\"string\"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}\r\nfunction Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}\r\nai.prototype.g=function(a,b,c){ci(this,\"precompose\",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,\"postcompose\",c,a,void 0)};\r\nfunction ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);\r\nfunction hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=\r\nk[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}\r\nfunction ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+\r\nq,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);\r\n1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split(\"\\n\");S=O.length;1<S?(X=Math.round(1.5*b.measureText(\"M\").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;\r\ncase 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);\r\nD=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}\r\nfunction li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);\r\nmi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};\r\nmi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};\r\nmi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);\r\nfunction oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nfunction pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}\r\nn.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};\r\nn.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};\r\nn.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:\"round\";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:\"round\";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};\r\nfunction qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);\r\nfunction ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;\r\nn.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};\r\nn.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};\r\nn.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};\r\nn.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nn.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:\"round\",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:\"round\",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};\r\nfunction si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j=\"\";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);\r\nfunction ui(a,b,c,d,e){if(\"\"!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=\r\nf.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=\r\n{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}\r\nti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:\"round\",e=e?e.slice():lh,f=void 0!==f?f:\"round\",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;\r\nvar k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:\"10px sans-serif\";h=void 0!==h?h:\"center\";l=void 0!==l?l:\"middle\";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:\"\";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=\"\"};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);\r\nfunction wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};\r\nvi.prototype.b=function(a,b){var c=void 0!==a?a.toString():\"0\",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};\r\nvi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};\r\nfunction xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}\r\nvar Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();\r\nif(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=\r\nb.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf(\"OPR\"),Gi=-1<Ei.navigator.userAgent.indexOf(\"Edge\");Di=!(!Ei.navigator.userAgent.match(\"CriOS\")&&null!==Ei.chrome&&void 0!==Ei.chrome&&\"Google Inc.\"===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}\r\nfunction Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-\r\nr[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=\r\ng[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=\r\n-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+\"/\"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,\r\na.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}\r\nfunction Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],\r\nw=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}\r\nfunction Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);\r\nMi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,\"precompose\",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,\"render\"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*\r\n(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+\r\nN),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],\r\nP[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,\"render\",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,\"postcompose\",c,a,d)};\r\nMi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=\r\nx:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get(\"preload\"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);\r\nOi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,\"precompose\",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,\"render\")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=\r\nb.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,\"render\",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,\"postcompose\",c,a,m)};\r\nOi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};\r\nOi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};\r\nfunction Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return\"canvas\"};\r\nRi.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,\"precompose\",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&\"ready\"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,\"postcompose\",a);this.a||(this.b.style.display=\r\n\"\",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement(\"DIV\");b.style.position=\"absolute\";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};\r\nUi.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display=\"none\",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=\r\nt.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,\r\nF),t.i),O=z.Z(t),S=O.style;S.maxWidth=\"none\";var X,P;0<G?(X=document.createElement(\"DIV\"),P=X.style,P.overflow=\"hidden\",P.width=F[0]+\"px\",P.height=F[1]+\"px\",S.position=\"absolute\",S.left=-G+\"px\",S.top=-G+\"px\",S.width=F[0]+2*G+\"px\",S.height=F[1]+2*G+\"px\",X.appendChild(O)):(S.width=F[0]+\"px\",S.height=F[1]+\"px\",X=O,P=S);P.position=\"absolute\";P.left=(Q-t.c[1])*F[0]+\"px\";P.top=(t.c[2]-N)*F[1]+\"px\";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),\r\nr.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&\r\n!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display=\"\",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get(\"preload\"));Uh(a,g);Wh(a,g);return!0};\r\nfunction Vi(a,b){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth=\"none\";b.style.position=\"absolute\";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};\r\nn.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,\"precompose\",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,\"render\",a,d));Xi(this,\"postcompose\",a,d)};\r\nfunction Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};\r\nn.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position=\"absolute\";c.style.width=\"100%\";c.style.height=\"100%\";c.className=\"ol-unselectable\";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement(\"DIV\");this.b.className=\"ol-unselectable\";c=this.b.style;c.position=\"absolute\";c.width=\"100%\";c.height=\"100%\";R(this.b,\"touchstart\",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};\r\nYi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return\"dom\"};\r\nYi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,\"precompose\")||Ha(b,\"postcompose\")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,\"precompose\",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&\"ready\"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||\r\n(this.b.style.display=\"\",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,\"postcompose\",a)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b=\"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;}\"}B(cj,aj);var dj=new cj;\r\nfunction ej(){this.b=\"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;}\"}B(ej,bj);var fj=new ej;\r\nfunction gj(a,b){this.i=a.getUniformLocation(b,\"j\");this.j=a.getUniformLocation(b,\"i\");this.h=a.getUniformLocation(b,\"k\");this.l=a.getUniformLocation(b,\"h\");this.b=a.getAttribLocation(b,\"e\");this.a=a.getAttribLocation(b,\"f\");this.f=a.getAttribLocation(b,\"c\");this.c=a.getAttribLocation(b,\"g\");this.g=a.getAttribLocation(b,\"d\")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf(\"OES_element_index_uint\"))&&b.getExtension(\"OES_element_index_uint\");R(this.C,\"webglcontextlost\",this.K,this);R(this.C,\"webglcontextrestored\",this.s,this)}B(jj,Aa);\r\nfunction kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}\r\njj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};\r\nfunction mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;\r\na.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+\"/\"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};\r\nfunction qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);\r\nfunction tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}\r\nfunction uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=\r\nH,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};\r\nfunction vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}\r\nfunction wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}\r\nsj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,\r\n1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-\r\n1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);\r\nreturn u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}\r\nsj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};\r\nfunction yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};\r\nyj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}\r\nyj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};\r\nfunction Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};\r\nFj.prototype.Ma=function(a){this.a=a};function Gj(){this.b=\"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;}\"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b=\"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;}\"}B(Ij,bj);var Jj=new Ij;\r\nfunction Kj(a,b){this.c=a.getUniformLocation(b,\"f\");this.f=a.getUniformLocation(b,\"e\");this.h=a.getUniformLocation(b,\"d\");this.g=a.getUniformLocation(b,\"g\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);\r\nfunction Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}\r\nLj.prototype.Jc=function(a,b,c){Nj(this,\"precompose\",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,\"postcompose\",\r\nc,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b=\"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;}\"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,\"e\");this.f=a.getUniformLocation(b,\"d\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([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.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};\r\nTj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];\r\nMj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==\r\nb.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,\r\nv),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get(\"preload\"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,\r\n-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};\r\nn.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};\r\nn.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get(\"renderOrder\");\r\nvoid 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};\r\nXj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement(\"CANVAS\");this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,\"webglcontextlost\",this.ge,this);R(this.b,\"webglcontextrestored\",this.he,this);this.a=new Xj;this.K=null;this.l=\r\nnew Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);\r\nfunction Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,\r\n6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}\r\nn.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return\"webgl\"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};\r\nfunction bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}\r\nn.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display=\"none\",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,\"precompose\",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&\"ready\"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=\r\ne,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display=\"\",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,\"postcompose\",a);Rf(this,a);a.postRenderFunctions.push(Pf)};\r\nn.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=[\"canvas\",\"webgl\",\"dom\"];\r\nfunction Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(re?\" ol-touch\":\"\");this.a.style.position=\r\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.s=document.createElement(\"DIV\");this.s.className=\"ol-overlaycontainer\";this.a.appendChild(this.s);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";a=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",of,\"mousewheel\",\"wheel\"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);\r\nthis.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,\"wheel\",this.Sa,this);R(this.a,\"mousewheel\",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La(\"layergroup\"),this.vd,this);R(this,La(\"view\"),this.Kd,this);R(this,La(\"size\"),this.Gd,this);R(this,La(\"target\"),this.Id,\r\nthis);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},\r\nthis)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get(\"layers\").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};\r\nn.R=function(){Da(this.ma);Da(this.N);ya(this.a,\"wheel\",this.Sa,this);ya(this.a,\"mousewheel\",this.Sa,this);void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set(\"target\",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};\r\nn.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get(\"target\")};n.Ra=function(){var a=this.Wb();return void 0!==a?\"string\"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};\r\nfunction fk(a){return a.get(\"layergroup\")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get(\"size\")};n.U=function(){return this.get(\"view\")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};\r\nn.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get(\"active\")&&!d.handleEvent(a))break}}};\r\nn.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};\r\nn.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,\"keydown\",this.Sa,this),R(a,\"keypress\",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener(\"resize\",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};\r\nn.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,\"propertychange\",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,\"propertychange\",this.render,this),R(a,\"change\",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get(\"layers\").remove(a)};\r\nn.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,\r\npostRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td(\"moveend\",this,h)),gb(h.extent,\r\nthis.va)));U(this,new Td(\"postrender\",this,h));d=g=this.Fd;this&&(d=ea(g,this));\"function\"!=ba()||aa.Window&&aa.Window.prototype&&!xd(\"Edge\")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};\r\nn.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set(\"size\",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set(\"size\",void 0)};\r\nfunction ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b=\"string\"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||\"boolean\"===typeof a.logo&&a.logo)d[\"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\"]=\r\n\"http://openlayers.org/\";else{var e=a.logo;\"string\"===typeof e?d[e]=\"\":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L(\"string\"==typeof e.href,44),L(\"string\"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:\"string\"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];\r\nif(\"canvas\"==k){if(qe){e=Ri;break}}else if(\"dom\"==k){e=Yi;break}else if(\"webgl\"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:\r\n1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:\r\n1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement(\"DIV\");this.c.className=\"ol-overlay-container\";this.c.style.position=\"absolute\";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:\"\",sb:\"\",wb:\"\",xb:\"\",visible:!0};this.f=null;R(this,La(\"element\"),this.td,this);R(this,La(\"map\"),\r\nthis.Ad,this);R(this,La(\"offset\"),this.Bd,this);R(this,La(\"position\"),this.Dd,this);R(this,La(\"positioning\"),this.Ed,this);void 0!==a.element&&this.set(\"element\",a.element);this.set(\"offset\",void 0!==a.offset?a.offset:[0,0]);this.set(\"positioning\",void 0!==a.positioning?a.positioning:\"top-left\");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get(\"element\"))&&this.c.appendChild(a)};\r\nn.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get(\"map\");a&&(this.f=R(a,\"postrender\",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};\r\nn.Dd=function(){hk(this);if(void 0!==this.get(\"position\")&&this.autoPan){var a=this.get(\"map\");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get(\"element\"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&\r\n(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set(\"map\",a)};n.Ac=function(a){this.set(\"position\",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}\r\nfunction jk(a,b){a.a.visible!==b&&(a.c.style.display=b?\"\":\"none\",a.a.visible=b)}\r\nfunction hk(a){var b=a.get(\"map\"),c=a.get(\"position\");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get(\"offset\"),f=a.get(\"positioning\"),g=e[0],e=e[1];if(\"bottom-right\"==f||\"center-right\"==f||\"top-right\"==f)\"\"!==a.a.sb&&(a.a.sb=b.left=\"\"),g=Math.round(d[0]-c[0]-g)+\"px\",a.a.wb!=g&&(a.a.wb=b.right=g);else{\"\"!==a.a.wb&&(a.a.wb=b.right=\"\");if(\"bottom-center\"==f||\"center-center\"==f||\"top-center\"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+\"px\";a.a.sb!=g&&(a.a.sb=b.left=g)}if(\"bottom-left\"==\r\nf||\"bottom-center\"==f||\"bottom-right\"==f)\"\"!==a.a.xb&&(a.a.xb=b.top=\"\"),c=Math.round(d[1]-c[1]-e)+\"px\",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{\"\"!==a.a.lb&&(a.a.lb=b.bottom=\"\");if(\"center-left\"==f||\"center-center\"==f||\"center-right\"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+\"px\";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};\r\nn.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,\"change\",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open(\"GET\",\"function\"===typeof a?a(d,e,f):a,!0);\"arraybuffer\"==b.$()&&(g.responseType=\"arraybuffer\");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;\"json\"==a||\"text\"==a?d=g.responseText:\"xml\"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,\"application/xml\"))):\"arraybuffer\"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}\r\nfunction qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}\r\nfunction tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return\"string\"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return\"json\"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?\r\n(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LineString\"};\r\nn.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}\r\nn.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,\"XY\",b);a.ua=c;a.w();return a};n.$=function(){return\"MultiLineString\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,\"XY\",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return\"MultiPoint\"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};\r\nfunction Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}\r\nfunction Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,\"XY\",b);d.a=c;d.w();return d};n.$=function(){return\"MultiPolygon\"};\r\nn.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,\"XY\",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b=\"XY\";!0===a.hasZ&&!0===a.hasM?b=\"XYZM\":!0===a.hasZ?b=\"XYZ\":!0===a.hasM&&(b=\"XYM\");return b}\r\nvar Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],\"XYZM\"):void 0!==a.z?new jc([a.x,a.y,a.z],\"XYZ\"):void 0!==a.m?new jc([a.x,a.y,a.m],\"XYM\"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};\r\nAk.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if(\"number\"===typeof c.x&&\"number\"===typeof c.y)d=\"Point\";else if(c.points)d=\"MultiPoint\";else if(c.paths)d=1===c.paths.length?\"LineString\":\"MultiLineString\";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||\r\ng.push([e.reverse()])}c=pa({},c);1===g.length?(d=\"Polygon\",c.rings=g[0]):(d=\"MultiPolygon\",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};\r\nAk.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb(\"EPSG:\"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],\"change\",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],\"change\",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};\r\nn.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return\"GeometryCollection\"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};\r\nn.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:\"EPSG:4326\");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}\r\nvar Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};\r\nGk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if(\"Feature\"==a.type)c=[this.b(a,b)];else if(\"FeatureCollection\"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};\r\nGk.prototype.c=function(a){a=a.crs;var b;a?\"name\"==a.type?b=Hb(a.properties.name):\"EPSG\"==a.type?b=Hb(\"EPSG:\"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement(\"CANVAS\"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,\"change\")};\r\nJk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext(\"2d\");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,\"change\")};\r\nJk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,\"error\",this.j,this,!0),R(this.b,\"load\",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:\"top-left\";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:\"fraction\";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:\"fraction\";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==\r\na.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:\"top-left\";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?\r\na.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if(\"fraction\"==this.l||\"fraction\"==this.i){if(!b)return null;a=this.g.slice();\"fraction\"==this.l&&(a[0]*=b[0]);\"fraction\"==this.i&&(a[1]*=b[1])}if(\"top-left\"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if(\"top-right\"==this.a||\"bottom-right\"==this.a)a[0]=-a[0]+b[0];if(\"bottom-left\"==this.a||\"bottom-right\"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};\r\nn.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if(\"top-left\"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if(\"top-right\"==this.c||\"bottom-right\"==this.c)a[0]=c[0]-b[0]-a[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};\r\nn.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,\"change\",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,\"change\",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return\"Circle\"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,\"XY\",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};\r\nn.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,\"error\",this.ce,this,!0),R(this.a,\"load\",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;\r\n(function(){var a={},b={Aa:a};(function(c){if(\"object\"===typeof a&&\"undefined\"!==typeof b)b.Aa=c();else{var d;\"undefined\"!==typeof window?d=window:\"undefined\"!==typeof global?d=global:\"undefined\"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q=\"function\"==typeof require&&require;if(!p&&q)return q(l,!0);if(k)return k(l,!0);q=Error(\"Cannot find module '\"+l+\"'\");throw q.code=\"MODULE_NOT_FOUND\",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=\r\na[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k=\"function\"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}\r\nfunction k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],\r\nh;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a(\"quickselect\");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,\r\nd=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),\r\nk=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},\r\nec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;\r\nq=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,\r\nf,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=\r\nf,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,\r\nd.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=[\"return a\",\" - b\",\";\"];this.Kb=new Function(\"a\",\"b\",b.join(a[0]));this.Lb=new Function(\"a\",\"b\",b.join(a[1]));this.la=new Function(\"a\",\"return {minX: a\"+a[0]+\", minY: a\"+a[1]+\", maxX: a\"+a[2]+\", maxY: a\"+a[3]+\"};\")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:\r\n1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}\r\nfunction Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:\"ready\",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,\r\nd;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl(\"addfeature\",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,\"change\",a.vc,a),R(c,\"propertychange\",a.vc,a)]}\r\nfunction $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl(\"addfeature\",h[d]))}\r\nfunction Zk(a,b){var c=!1;R(a,\"addfeature\",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,\"removefeature\",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}\r\nn.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl(\"clear\"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}\r\nn.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};\r\nn.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl(\"changefeature\",a))};\r\nfunction Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl(\"removefeature\",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);\r\nfunction el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if(\"Circle\"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],\r\ng=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,\r\nLa(\"active\"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}\r\nfunction hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}\r\nfunction pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}\r\nfunction tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}\r\nfunction ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl(\"drawstart\",a.g))}\r\nfunction nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}\r\nfunction sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));\"MultiPoint\"===a.P?lk(b,new yk([c])):\"MultiLineString\"===a.P?lk(b,new xk([c])):\"MultiPolygon\"===a.P&&lk(b,new zk([c]));U(a,new dl(\"drawend\",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;\r\nfunction ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get(\"active\");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;\"Point\"===a||\"MultiPoint\"===a?b=kl:\"LineString\"===a||\"MultiLineString\"===a?b=ll:\"Polygon\"===a||\"MultiPolygon\"===a?b=jl:\"Circle\"===a&&(b=rl);return b}var kl=\"Point\",ll=\"LineString\",jl=\"Polygon\",rl=\"Circle\";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||\r\n0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};\r\nwl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};\r\nwl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d=\"number\"===typeof c?c:c[0],c=\"number\"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};\r\nwl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,\"change\",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\\{z\\}/g,d=/\\{x\\}/g,e=/\\{y\\}/g,f=/\\{-y\\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}\r\nfunction Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=\"\"}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};\r\nfunction Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+\"/\"+b+\"/\"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};\r\nfunction Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;\r\nfunction Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join(\"\\n\");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}\r\nB(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl(\"tileloadstart\",a));break;case 2:U(this,new Fl(\"tileloadend\",a));break;case 3:U(this,new Fl(\"tileloaderror\",a))}};function Hl(a,b,c){a.tileUrlFunction=b;\"undefined\"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}\r\nGl.prototype.s=function(a){var b=[],c=/\\{(\\d)-(\\d)\\}/.exec(a)||/\\{([a-z])-([a-z])\\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}\r\nB(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};\r\nn.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,\"change\",a.v,a);return e}\r\nfunction $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}\r\nfunction Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:\"EPSG:3857\",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb(\"EPSG:3857\").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,\r\ntileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+\"=\"+encodeURIComponent(b[a]))});var d=c.join(\"&\");a=a.replace(/[?&]$/,\"\");a=-1===a.indexOf(\"?\")?a+\"?\":a+\"&\";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:\"anonymous\",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};\r\nQl.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(\":\").pop(),d.SIZE=f[0]+\",\"+f[1],d.BBOX=e.join(\",\"),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\"ImageServer/exportImage\"),\r\nb==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c=\"\",d=\"\",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d=\"round\"),c=this.a.f,void 0===c&&(c=\"round\"),e=this.a.h,void 0===\r\ne&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):\"-\",f=this.i?rh(this.i):\"-\",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=[\"r\"+e+f+(void 0!==\r\nthis.c?this.c.toString():\"-\")+(void 0!==this.g?this.g.toString():\"-\")+(void 0!==this.h?this.h.toString():\"-\")+(void 0!==this.b?this.b.toString():\"-\"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==\r\na.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;\r\nn.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};\r\nn.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y(\"ol.format.GeoJSON\",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y(\"ol.format.EsriJSON\",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y(\"ol.style.Style\",yh);y(\"ol.style.Circle\",ph);y(\"ol.style.RegularShape\",Rl);y(\"ol.style.Fill\",sh);y(\"ol.style.Stroke\",xh);y(\"ol.style.Icon\",Lk);\r\ny(\"ol.style.Text\",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:\"#333\"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y(\"ol.View\",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;\r\nuc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y(\"ol.control.defaults\",ee);y(\"ol.layer.Tile\",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;\r\nW.prototype.on=W.prototype.Y;y(\"ol.layer.Vector\",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y(\"ol.source.OSM\",Ol);Ol.prototype.refresh=Ol.prototype.Ja;\r\ny(\"ol.source.XYZ\",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y(\"ol.Map\",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;\r\nZ.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y(\"ol.source.Vector\",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;\r\nXk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y(\"ol.source.TileArcGISRest\",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y(\"ol.Overlay\",gk);gk.prototype.setPosition=gk.prototype.Ac;y(\"ol.Feature\",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y(\"ol.geom.Point\",jc);\r\njc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y(\"ol.geom.Polygon\",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y(\"ol.geom.LineString\",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y(\"ol.proj.Projection\",Eb);Eb.prototype.getCode=Eb.prototype.l;\r\ny(\"ol.interaction.Draw\",el);el.prototype.on=el.prototype.Y;y(\"ol.animation.pan\",Dc);y(\"ol.control.FullScreen\",Xd);\r\n  return OPENLAYERS.ol;\r\n}));\r\n\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/ol/ol-build.js\n ** module id = 6\n ** module chunks = 1 2 5\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\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMove.ts\n **/","import LayerBaseVector from \"../layers/LayerBaseVector\";\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\nimport {ol} from 'custom-ol'\r\nimport Timer = NodeJS.Timer;\r\nconst $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<Timer>;\r\n    _mapMoveCallbackTimeout: Array<Timer>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\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    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (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 lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\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 ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\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  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\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    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\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] = functionId;\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMoveCls.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\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 theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\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\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapInteractionBase.ts\n **/","import 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 true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\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 true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/checkDefined.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/makeGuid.ts\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\n\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopup.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport MapEvent = ol.MapEvent;\r\nconst $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction{\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback{\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent{\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\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    _popupOpen: boolean;\r\n    _passThroughLayerFeatureArray:  Array<FeatureLayerProperties>;\r\n    _currentPopupIndex: number;\r\n    _popupContentLength: number;\r\n    _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    _$popupCloser: JQuery;\r\n    _$popupContent: JQuery;\r\n    _$popupContainer: JQuery;\r\n    _popupOverlay: ol.Overlay;\r\n    _arrPopupLayers: Array<LayerBaseVector>;\r\n    _popupCoordinate: ol.Coordinate;\r\n    _popupChangedFunctions: Array<popupChangedFunction>;\r\n     _mapClickFunctions: Array<Function>;\r\n    _selectionLayerLookup: Object;\r\n     _arrPopupLayerIds: Array<string>;\r\n     _arrPopupLayerNames: Array<string>;\r\n    _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    _arrPopupContentFunction: Array<popupCallback>;\r\n    _selectionLayers: Array<ol.layer.Vector>;\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\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        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        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\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: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if(typeof target == 'string'){\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\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\r\n        this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter()\r\n            }});\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\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);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\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 as string;\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', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['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            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\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 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: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\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  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) =>{\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    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     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\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  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {\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\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: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\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     *\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?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\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: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopupCls.ts\n **/","/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nimport {LayerBase} from \"../layers/LayerBase\";\r\nconst $ = require('jquery');\r\nimport {ol} from 'custom-ol';\r\n\r\nlet nm = provide('collections.layerSwipe');\r\n\r\n\r\nclass LayerSwipe {\r\n    leftLayers: Array<LayerBase>;\r\n    rightLayers: Array<LayerBase>;\r\n    _percentRight: number;\r\n    _map: ol.Map;\r\n    $mapElement: JQuery;\r\n    $swiper: JQuery;\r\n    dragging: boolean;\r\n    offset: number;\r\n    /**\r\n     *\r\n     * @param {ol.Map} map - the map\r\n     * @param {string} [sliderContent=''] - additional html to be added inside the slider div\r\n     */\r\n    constructor(map: ol.Map, sliderContent: string = '') {\r\n\r\n        sliderContent = sliderContent || '';\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.leftLayers = [];\r\n\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.rightLayers = [];\r\n\r\n        this._percentRight = 50;\r\n        this.offset = null;\r\n\r\n        this._map = map;\r\n        this.$mapElement = $(map.getTargetElement());\r\n        this.$mapElement.append(`<div class=\"layer-swiper\">${sliderContent}</div>`);\r\n\r\n\r\n        this.$swiper = this.$mapElement.find('.layer-swiper');\r\n        this.percentRight = this.percentRight;\r\n\r\n        this.dragging = false;\r\n\r\n        this.$mapElement.mouseleave(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){\r\n            evt.preventDefault();\r\n        });\r\n\r\n        this.$swiper.mousedown((evt) => {\r\n            this.dragging = true;\r\n            this.offset = evt.offsetX;\r\n        });\r\n\r\n        $(window).mouseup(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$mapElement.mousemove((evt) => {\r\n            if (this.dragging) {\r\n                let mapLeft = this.$mapElement.position().left;\r\n                let mapWidth = this.$mapElement.width();\r\n\r\n                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to left side\r\n     */\r\n    addLeftLayer(lyr) {\r\n\r\n        if (this.leftLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'];\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(0, 0, width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'];\r\n            ctx.restore();\r\n        });\r\n\r\n\r\n        this.leftLayers.push(lyr);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to right side\r\n     */\r\n    addRightLayer(lyr) {\r\n\r\n        if (this.rightLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'];\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'];\r\n            ctx.restore();\r\n        });\r\n\r\n        this.rightLayers.push(lyr);\r\n    }\r\n\r\n    get percentRight() : number{\r\n        return this._percentRight;\r\n    }\r\n\r\n    set percentRight(percent: number) {\r\n        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();\r\n\r\n        if (percent < 0) {\r\n            return;\r\n        } else if (maxed && percent > this.percentRight) {\r\n            return;\r\n        }\r\n\r\n        this._percentRight = percent;\r\n        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);\r\n        this._map.render();\r\n    }\r\n}\r\n\r\nnm.LayerSwipe = LayerSwipe;\r\nexport default LayerSwipe;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/layerSwipe.ts\n **/","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} 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 'custom-ol';\r\nconst nm = provide('layers');\r\n\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions{\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n\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     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\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?: string) {\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        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            super.addLegendContent(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     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerEsriMapServer.ts\n **/","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    _legendCheckbox: boolean;\r\n    _url: string;\r\n    _opacity: number;\r\n    _minZoom: number;\r\n    _maxZoom: number;\r\n    _visible: boolean;\r\n    _loaded: boolean;\r\n    _zIndex: number;\r\n    _legendContent: string;\r\n    _params: any;\r\n    id: string;\r\n    _name: string;\r\n    _source: ol.source.Source;\r\n    animate: boolean;\r\n    _legendCollapse: boolean;\r\n    _maxResolution: number;\r\n    _minResolution: number;\r\n    _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    _olLayer: ol.layer.Layer;\r\n    _applyCollapseCalled: boolean;\r\n\r\n\r\n\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: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\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        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\r\n        /**\r\n         *\r\n         * @protected\r\n         */\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        }\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(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\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    /**\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(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBase.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/zoomResolutionConvert.ts\n **/","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-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\nexport interface EsriResponse{\r\n    drawingInfo: {\r\n        renderer: EsriRenderer\r\n    },\r\n    geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n    type: string;\r\n    symbol: EsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: string;\r\n        width: number;\r\n    },\r\n    color: string;\r\n    width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: EsriSymbol;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\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\ninterface ICommonSymbol{\r\n    new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\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: EsriSymbol, opacity: number) {\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: EsriSymbol, opacity: number) {\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    opacity: number;\r\n    renderer: EsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n    constructor(esriResponse: 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    symbol: EsriSymbol;\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: ICommonSymbol) {\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    propertyName: string;\r\n    defaultSymbol: EsriSymbol;\r\n    defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: Object;\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\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: 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\r\n        this.olStyle = (feature: ol.Feature) => {\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\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: EsriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = 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 *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\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        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<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 (!skipLayerNameAndExpander) {\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/esriToOlStyle.ts\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/itsMap.js b/test-html/js/itsMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9251f0379d31e750e71c9dfd243f444c3fafb69
--- /dev/null
+++ b/test-html/js/itsMap.js
@@ -0,0 +1,13175 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 12/18/2015.
+	 */
+	// import 'babel-polyfill/dist/polyfill.min';
+	var ItsLayerCollection_1 = __webpack_require__(19);
+	var LayerLegend_1 = __webpack_require__(24);
+	var quickMap_1 = __webpack_require__(1);
+	var map = quickMap_1.default();
+	window['map'] = map;
+	var itsLayerCollection = new ItsLayerCollection_1.default(map);
+	var layerArray = [
+	    {
+	        groupName: 'ITS Inventory Layers',
+	        collapse: false,
+	        addCheck: true,
+	        items: itsLayerCollection.layers
+	    }
+	];
+	var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
+	console.log('it works');
+	console.log('it works');
+	console.log('it works');
+	console.log('it works');
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/15/2015.
+	 */
+	"use strict";
+	var quickMapBase_1 = __webpack_require__(2);
+	var provide_1 = __webpack_require__(4);
+	var mapMove_1 = __webpack_require__(7);
+	var mapPopup_1 = __webpack_require__(12);
+	var nm = provide_1.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 the ol map
+	 */
+	function quickMap(options) {
+	    var m = quickMapBase_1.quickMapBase(options);
+	    mapMove_1.default.init(m);
+	    mapPopup_1.default.init(m);
+	    return m;
+	}
+	exports.quickMap = quickMap;
+	nm.quickMap = quickMap;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = quickMap;
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/15/2015.
+	 */
+	"use strict";
+	var $ = __webpack_require__(3);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * Sets up a map with some default parameters and initializes
+	 * mapMove and mapPopup
+	 *
+	 * @param [options={}] config options
+	 * @param [options.divId=map] map div id
+	 * @param [options.center={}] center config object
+	 * @param [options.center.x=-10018378] center x, web mercator x or lon
+	 * @param [options.center.y=5574910] center y, web mercator y or lat
+	 * @param [options.zoom=7] zoom level
+	 * @param [options.minZoom=undefined] min zoom
+	 * @param [options.maxZoom=undefined] max zoom
+	 * @param [options.baseSwitcher=true] if add base map switcher
+	 * @param [options.fullScreen=false] if add base map switcher
+	 * @returns the ol map
+	 */
+	function quickMapBase(options) {
+	    options = options || {};
+	    options.divId = options.divId || 'map';
+	    options.center = options.center || { x: -10018378, 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 = $('#' + options.divId);
+	    $mapDiv.css('position', 'relative');
+	    var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() });
+	    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.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) {
+	    }
+	    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 custom_ol_1.ol.geom.Point([options.center.x, options.center.y]);
+	        new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+	        p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" }));
+	        var coordinates = p.getCoordinates();
+	        options.center.x = coordinates[0];
+	        options.center.y = coordinates[1];
+	    }
+	    var map = new custom_ol_1.ol.Map({
+	        layers: [osmLayer],
+	        target: options.divId,
+	        controls: custom_ol_1.ol.control.defaults({
+	            attributionOptions: { collapsible: false }
+	        }),
+	        view: new custom_ol_1.ol.View({
+	            center: [options.center.x, options.center.y],
+	            zoom: options.zoom,
+	            minZoom: options.minZoom,
+	            maxZoom: options.maxZoom
+	        })
+	    });
+	    if (options.fullScreen) {
+	        //TODO add full screen options to ts
+	        map.addControl(new custom_ol_1.ol.control.FullScreen({}));
+	    }
+	    return map;
+	}
+	exports.quickMapBase = quickMapBase;
+	nm.quickMapBase = quickMapBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = quickMapBase;
+
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+	 * 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 ( true ) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+			return jQuery;
+		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+	
+	
+	
+	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;
+	}));
+
+
+/***/ },
+/* 4 */
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 12/10/2015.
+	 */
+	"use strict";
+	/**
+	 * 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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = provide;
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	exports.ol = __webpack_require__(6);
+	// // export default require('../ol/ol-build');
+	//
+	// const fish = 10;
+	// export = fish;
+	//
+	//
+	// export function cat(bird: string){
+	//     console.log('eat the fish')
+	// }
+	//
+	// export function nice(eat: number){
+	//     console.log('eat that fish');
+	// }
+	//
+	// export class Big{
+	//     glenn: string;
+	//
+	//     constructor(isGlenn){
+	//         this.glenn  = isGlenn;
+	//     }
+	//
+	//     set isGlenn(f: string){
+	//         console.log(this.glenn)
+	//     }
+	//
+	//     run(){
+	//         console.log(this.glenn + " can run");
+	//     }
+	// }
+	//
+	// export namespace HereIt{
+	//
+	//     export class Big2 {
+	//         glenn: string;
+	//
+	//         constructor(isGlenn) {
+	//             this.glenn = isGlenn;
+	//         }
+	//
+	//         set isGlenn(f: string) {
+	//             console.log(this.glenn)
+	//         }
+	//
+	//         run() {
+	//             console.log(this.glenn + " can run");
+	//         }
+	//     }
+	//
+	//
+	// } 
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var require;var require;/* WEBPACK VAR INJECTION */(function(global) {// OpenLayers 3. See http://openlayers.org/
+	// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
+	;(function (root, factory) {
+	  if (true) {
+	    module.exports = factory();
+	  } else if (typeof define === "function" && define.amd) {
+	    define([], factory);
+	  } else {
+	    root.ol = factory();
+	  }
+	}(this, function () {
+	  var OPENLAYERS = {};
+	  var n,aa=this;
+	function ba(){var a=aa.setImmediate,b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
+	else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}
+	function ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if("undefined"!==typeof window)var K=window;else"undefined"!==typeof global?K=global:"undefined"!==typeof self&&(K=self);function ha(a){this.message="Assertion failed. See /doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}
+	function xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}
+	function M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c="string"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};
+	function Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,"change")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]="change:"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja("propertychange",a,c))))};
+	V.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}
+	function Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}
+	function jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}
+	function nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}
+	function ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}
+	function qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){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 Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}
+	Ab.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db["us-ft"]=1200/3937;
+	function Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);
+	else{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if("degrees"==this.a)return a;var c=Mb(this,Hb("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};
+	Eb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?"string"===typeof a?Hb(a):a:Hb("EPSG:3857")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}
+	function Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if("string"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}
+	function Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c="XY";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};
+	n.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c="XY";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};
+	n.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};
+	n.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=
+	a[b+m*d],f[g++]=a[b+m*d+1]);return g}
+	function hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=
+	z,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LinearRing"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return"Point"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,"XY",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}
+	function oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}
+	function sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,"XY",b,c);return a};n.$=function(){return"Polygon"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,"XY",null,this.ja)};
+	function rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;
+	void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:"number"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,
+	a.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};
+	function yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};
+	n.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,"XY",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),
+	l=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};
+	n.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc="center",wc="resolution",xc="rotation";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}
+	function Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}
+	function Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:
+	this.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};
+	Mc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}
+	function Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}
+	function Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get("length");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get("length")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};
+	function fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set("length",a.a.length)}var hd="add",id="remove";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ld=/^(?: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,md=/^([a-z]*)$/i;function nd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a}
+	var pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,
+	d=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=""}function xd(a){return-1!=ud.indexOf(a)};var yd=xd("Opera"),zd=xd("Trident")||xd("MSIE"),Ad=xd("Edge"),Bd=xd("Gecko")&&!(-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"))&&!(xd("Trident")||xd("MSIE"))&&!xd("Edge"),Cd=-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"),Dd;
+	a:{var Ed="",Fd=function(){var a=ud;if(Bd)return/rv\:([^\);]+)(\)|;)/.exec(a);if(Ad)return/Edge\/([\d\.]+)/.exec(a);if(zd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Cd)return/WebKit\/(\S+)/.exec(a);if(yd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:"");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")}
+	var Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),
+	c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}();
+	function Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id["9.0"])){for(var c=0,d=rd(String(Dd)).split("."),e=rd("9.0").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 p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==
+	p[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,"matrix3d("+e.join(",")+")")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}
+	function Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D="string"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};
+	Ud.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,"postrender",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement("UL");this.j=document.createElement("LI");this.B.appendChild(this.j);this.j.style.display="none";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.h=document.createElement("span"),this.h.textContent=d):this.h=
+	d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.s=document.createElement("span"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);R(d,"click",this.P,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.g&&this.v?" ol-collapsed":"")+(this.v?"":" ol-uncollapsible");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?
+	a.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);
+	function Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+
+	1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display="",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display="none",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement("LI"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=
+	d,this.a[A]=!0;for(A in b)d=document.createElement("LI"),d.innerHTML=b[A].a,d.style.display="none",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?"":"none",this.u=A);A&&sa(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,""===
+	b?c=F:(c=document.createElement("a"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?"none":""}else this.u&&(this.element.style.display="none",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.g="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.h="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.a+"-"+Yd();b.setAttribute("type","button");b.title=c;b.appendChild(this.g);R(b,"click",this.v,this);c=document.createElement("div");
+	c.className=this.a+" ol-unselectable ol-control "+(Zd()?"":"ol-unsupported");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);
+	Xd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?"string"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):
+	$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+"-true",Rd(this.h,this.g)):(a.className=this.a+"-false",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};
+	function Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}
+	function $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.a=null;"string"===typeof c?(this.a=document.createElement("span"),this.a.className="ol-compass",this.a.textContent=c):(this.a=c,this.a.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.a);R(c,"click",be.prototype.s,this);d=document.createElement("div");
+	d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add("ol-hidden")}B(be,Ud);
+	be.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};
+	function ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b="rotate("+a+"rad)";if(this.c){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);R(h,"click",de.prototype.c.bind(this,
+	c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);R(d,"click",de.prototype.c.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);
+	de.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;
+	function ge(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!xd("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ea(function(a){if(("*"==d||a.origin==d)&&a.data==
+	c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!xd("Trident")&&!xd("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT");
+	b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",le=-1!==ke.indexOf("firefox"),me=-1!==ke.indexOf("safari")&&-1===ke.indexOf("chrom"),ne=-1!==ke.indexOf("macintosh"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!("HTMLCanvasElement"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re="ontouchstart"in K,se="PointerEvent"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];
+	if("WebGLRenderingContext"in K)try{var we=ie(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}n=ye.prototype;
+	n.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};
+	n.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=["","unavailable","touch","pen","mouse"]}B(Je,xe);function Ke(a,b){var c=b;"number"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};
+	n.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le("lostpointercapture",a,a))};n.Vd=function(a){U(this.b,new Le("gotpointercapture",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget:
+	null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}
+	var Qe=!1;try{Qe=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};
+	function Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}
+	function Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}
+	n.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};
+	n.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};
+	n.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};
+	function Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};
+	function $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}
+	function He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};
+	var Fe="pointermove",Ee="pointerdown",Ge="pointerup",Ve="pointerover",cf="pointerout",We="pointerenter",Xe="pointerleave",De="pointercancel",bf=[["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 df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);
+	function ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}
+	function lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};
+	n.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};
+	n.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf="singleclick",hf="click",jf="dblclick",qf="pointerdrag",pf="pointermove",of="pointerdown",mf="pointerup",nf="pointercancel",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:"pointerover",Me:"pointerout",Je:"pointerenter",Ke:"pointerleave",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);
+	function tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get("maxResolution"),h=a.get("minResolution");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get("extent")};n.Xb=function(){return this.get("opacity")};n.gb=function(){return this.get("visible")};n.Yb=function(){return this.get("zIndex")};n.Bc=function(a){this.set("opacity",a)};n.Cc=function(a){this.set("visible",a)};
+	n.Dc=function(a){this.set("zIndex",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:"ready";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if("string"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};
+	vf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La("source"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get("source")||null};n.Sb=function(){var a=this.da();return a?a.T():"undefined"};n.fe=function(){this.w()};
+	n.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,"change",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,"precompose",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,"change",a.render,a),this.w())};n.$b=function(a){this.set("source",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?nd(c):"null");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?nd(c):"null")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}
+	function Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}
+	function Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}
+	n.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};
+	n.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,"change",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}
+	function Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=""}B(Sf,Ga);function Tf(a){U(a,"change")}Sf.prototype.getKey=function(){return this.key+"/"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};
+	function Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],"change",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,"change",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set("active",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}
+	function eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function mg(a){L(a.b,56);return"mouse"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}
+	function og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}
+	function tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();
+	zc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}
+	function yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"}
+	zg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||"ol-dragbox");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}
+	function Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxdrag",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg("boxend",a.coordinate,a)));return!1}
+	function Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxstart",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}B(Ig,Dg);
+	Ig.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);
+	function Kg(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);
+	function Og(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}
+	Ng.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);
+	function Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}
+	function Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}
+	function Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La("layers"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set("layers",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};
+	n.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get("layers");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,"propertychange",this.rb,this),R(d,"change",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,"propertychange",this.rb,this),R(a,"change",this.rb,this)];this.w()};
+	n.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get("layers"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return"ready"};function Yg(a){Eb.call(this,{code:a,units:"m",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh="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(a){return new Yg(a)});
+	function ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:"degrees",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};
+	var gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh("CRS:84"),new fh("EPSG:4326","neu"),new fh("urn:ogc:def:crs:EPSG::4326","neu"),new fh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new fh("urn:ogc:def:crs:OGC:1.3:CRS84"),new fh("urn:ogc:def:crs:OGC:2:84"),new fh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new fh("urn:x-ogc:def:crs:EPSG:4326","neu")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set("preload",void 0!==a.preload?a.preload:0);this.set("useInterimTilesOnError",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get("useInterimTilesOnError")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));
+	else{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):"-",h=this.g?rh(this.g):"-";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?
+	a.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;
+	n.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};
+	n.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():"f"+(a.b?nd(a.b):"-"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();
+	function vh(a,b,c){c||(c=0);var d=Array(16);if("string"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=
+	c+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>
+	20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|
+	g>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|
+	g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|
+	g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^
+	b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;
+	f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+
+	(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;
+	c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}
+	function wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if("string"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}
+	function qh(a){if(void 0===a.l){var b="s"+(a.a?nd(a.a):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.b?a.b.toString():"-")+","+(void 0!==a.g?a.g:"-")+","+(void 0!==a.h?a.h.toString():"-")+","+(void 0!==a.c?a.c.toString():"-"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,
+	d);else for(c="",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){"function"===typeof b?a.c=b:"string"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}
+	function Bh(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:"rgba(255,255,255,0.4)"}),b=new xh({color:"#3399CC",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}
+	function Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,
+	a.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c="";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);
+	function Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}
+	function Ih(a,b,c,d){var e=0;if(a.ca&&""!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+
+	a.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;
+	n.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};
+	n.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}""!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};
+	n.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}""!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}""!==this.c&&(a=tc(a),Ih(this,a,2,2))}};
+	n.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}
+	function Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=
+	b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}
+	n.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};
+	n.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};
+	n.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==a?a:"middle"};this.c=void 0!==
+	h?h:"";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=""};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&"ready"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}
+	function Wh(a,b){var c=b.D;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(L("string"==typeof c.href,44),L("string"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}
+	function Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}
+	ai.prototype.g=function(a,b,c){ci(this,"precompose",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,"postcompose",c,a,void 0)};
+	function ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=["Polygon","LineString","Image","Text"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);
+	function hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=
+	k[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}
+	function ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+
+	q,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);
+	1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split("\n");S=O.length;1<S?(X=Math.round(1.5*b.measureText("M").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;
+	case 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);
+	D=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}
+	function li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);
+	mi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};
+	mi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};
+	mi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);
+	function oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};
+	function pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}
+	n.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};
+	n.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};
+	n.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:"round";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:"round";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};
+	function qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);
+	function ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;
+	n.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};
+	n.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};
+	n.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};
+	n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};
+	n.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:"round",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};
+	function si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j="";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);
+	function ui(a,b,c,d,e){if(""!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=
+	f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=
+	{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}
+	ti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:"round",e=e?e.slice():lh,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;
+	var k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:"10px sans-serif";h=void 0!==h?h:"center";l=void 0!==l?l:"middle";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:"";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);
+	function wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};
+	vi.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};
+	vi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};
+	function xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}
+	var Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();
+	if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=
+	b.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf("OPR"),Gi=-1<Ei.navigator.userAgent.indexOf("Edge");Di=!(!Ei.navigator.userAgent.match("CriOS")&&null!==Ei.chrome&&void 0!==Ei.chrome&&"Google Inc."===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}
+	function Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-
+	r[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=
+	g[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=
+	-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,
+	a.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}
+	function Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],
+	w=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}
+	function Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);
+	Mi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,"precompose",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,"render"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*
+	(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+
+	N),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],
+	P[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,"render",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,"postcompose",c,a,d)};
+	Mi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=
+	x:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get("preload"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);
+	Oi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,"precompose",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,"render")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=
+	b.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,"render",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,"postcompose",c,a,m)};
+	Oi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};
+	Oi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get("renderOrder");
+	void 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};
+	function Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return"canvas"};
+	Ri.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,"precompose",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&"ready"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,"postcompose",a);this.a||(this.b.style.display=
+	"",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display="none",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement("DIV");b.style.position="absolute";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};
+	Ui.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display="none",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=
+	t.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,
+	F),t.i),O=z.Z(t),S=O.style;S.maxWidth="none";var X,P;0<G?(X=document.createElement("DIV"),P=X.style,P.overflow="hidden",P.width=F[0]+"px",P.height=F[1]+"px",S.position="absolute",S.left=-G+"px",S.top=-G+"px",S.width=F[0]+2*G+"px",S.height=F[1]+2*G+"px",X.appendChild(O)):(S.width=F[0]+"px",S.height=F[1]+"px",X=O,P=S);P.position="absolute";P.left=(Q-t.c[1])*F[0]+"px";P.top=(t.c[2]-N)*F[1]+"px";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),
+	r.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&
+	!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display="",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get("preload"));Uh(a,g);Wh(a,g);return!0};
+	function Vi(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth="none";b.style.position="absolute";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};
+	n.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,"precompose",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,"render",a,d));Xi(this,"postcompose",a,d)};
+	function Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};
+	n.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get("renderOrder");
+	void 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";R(this.b,"touchstart",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};
+	Yi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return"dom"};
+	Yi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,"precompose")||Ha(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,"precompose",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&"ready"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||
+	(this.b.style.display="",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b="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;}"}B(cj,aj);var dj=new cj;
+	function ej(){this.b="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;}"}B(ej,bj);var fj=new ej;
+	function gj(a,b){this.i=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.h=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.c=a.getAttribLocation(b,"g");this.g=a.getAttribLocation(b,"d")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf("OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");R(this.C,"webglcontextlost",this.K,this);R(this.C,"webglcontextrestored",this.s,this)}B(jj,Aa);
+	function kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}
+	jj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};
+	function mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;
+	a.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+"/"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};
+	function qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);
+	function tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}
+	function uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=
+	H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};
+	function vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}
+	function wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}
+	sj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,
+	1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-
+	1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);
+	return u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}
+	sj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};
+	function yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};
+	yj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}
+	yj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};
+	function Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};
+	Fj.prototype.Ma=function(a){this.a=a};function Gj(){this.b="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;}"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b="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;}"}B(Ij,bj);var Jj=new Ij;
+	function Kj(a,b){this.c=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.h=a.getUniformLocation(b,"d");this.g=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);
+	function Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}
+	Lj.prototype.Jc=function(a,b,c){Nj(this,"precompose",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,"postcompose",
+	c,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b="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;}"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([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.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};
+	Tj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];
+	Mj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==
+	b.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,
+	v),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get("preload"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,
+	-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};
+	n.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};
+	n.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get("renderOrder");
+	void 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};
+	Xj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,"webglcontextlost",this.ge,this);R(this.b,"webglcontextrestored",this.he,this);this.a=new Xj;this.K=null;this.l=
+	new Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);
+	function Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,
+	6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}
+	n.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return"webgl"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};
+	function bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}
+	n.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display="none",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,"precompose",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&"ready"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=
+	e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display="",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,"postcompose",a);Rf(this,a);a.postRenderFunctions.push(Pf)};
+	n.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=["canvas","webgl","dom"];
+	function Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(re?" 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.s=document.createElement("DIV");this.s.className="ol-overlaycontainer";this.a.appendChild(this.s);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",of,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);
+	this.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Sa,this);R(this.a,"mousewheel",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La("layergroup"),this.vd,this);R(this,La("view"),this.Kd,this);R(this,La("size"),this.Gd,this);R(this,La("target"),this.Id,
+	this);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},
+	this)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get("layers").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};
+	n.R=function(){Da(this.ma);Da(this.N);ya(this.a,"wheel",this.Sa,this);ya(this.a,"mousewheel",this.Sa,this);void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};
+	n.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get("target")};n.Ra=function(){var a=this.Wb();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};
+	function fk(a){return a.get("layergroup")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get("size")};n.U=function(){return this.get("view")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};
+	n.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get("active")&&!d.handleEvent(a))break}}};
+	n.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};
+	n.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,"keydown",this.Sa,this),R(a,"keypress",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener("resize",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};
+	n.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,"propertychange",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,"propertychange",this.render,this),R(a,"change",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get("layers").remove(a)};
+	n.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,
+	postRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td("moveend",this,h)),gb(h.extent,
+	this.va)));U(this,new Td("postrender",this,h));d=g=this.Fd;this&&(d=ea(g,this));"function"!=ba()||aa.Window&&aa.Window.prototype&&!xd("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};
+	n.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set("size",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set("size",void 0)};
+	function ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["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 e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L("string"==typeof e.href,44),L("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];
+	if("canvas"==k){if(qe){e=Ri;break}}else if("dom"==k){e=Yi;break}else if("webgl"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:
+	1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:
+	1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:"",sb:"",wb:"",xb:"",visible:!0};this.f=null;R(this,La("element"),this.td,this);R(this,La("map"),
+	this.Ad,this);R(this,La("offset"),this.Bd,this);R(this,La("position"),this.Dd,this);R(this,La("positioning"),this.Ed,this);void 0!==a.element&&this.set("element",a.element);this.set("offset",void 0!==a.offset?a.offset:[0,0]);this.set("positioning",void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get("element"))&&this.c.appendChild(a)};
+	n.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get("map");a&&(this.f=R(a,"postrender",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};
+	n.Dd=function(){hk(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.get("map");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get("element"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&
+	(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set("map",a)};n.Ac=function(a){this.set("position",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}
+	function jk(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)}
+	function hk(a){var b=a.get("map"),c=a.get("position");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get("offset"),f=a.get("positioning"),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.sb&&(a.a.sb=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.wb!=g&&(a.a.wb=b.right=g);else{""!==a.a.wb&&(a.a.wb=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.sb!=g&&(a.a.sb=b.left=g)}if("bottom-left"==
+	f||"bottom-center"==f||"bottom-right"==f)""!==a.a.xb&&(a.a.xb=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{""!==a.a.lb&&(a.a.lb=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a="geometry";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};
+	n.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,"change",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open("GET","function"===typeof a?a(d,e,f):a,!0);"arraybuffer"==b.$()&&(g.responseType="arraybuffer");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;"json"==a||"text"==a?d=g.responseText:"xml"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,"application/xml"))):"arraybuffer"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}
+	function qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}
+	function tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return"json"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?
+	(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LineString"};
+	n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}
+	n.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,"XY",b);a.ua=c;a.w();return a};n.$=function(){return"MultiLineString"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,"XY",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return"MultiPoint"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};
+	function Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}
+	function Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,"XY",b);d.a=c;d.w();return d};n.$=function(){return"MultiPolygon"};
+	n.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,"XY",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b}
+	var Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new jc([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new jc([a.x,a.y,a.m],"XYM"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};
+	Ak.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if("number"===typeof c.x&&"number"===typeof c.y)d="Point";else if(c.points)d="MultiPoint";else if(c.paths)d=1===c.paths.length?"LineString":"MultiLineString";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||
+	g.push([e.reverse()])}c=pa({},c);1===g.length?(d="Polygon",c.rings=g[0]):(d="MultiPolygon",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};
+	Ak.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb("EPSG:"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],"change",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],"change",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};
+	n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return"GeometryCollection"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};
+	n.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}
+	var Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};
+	Gk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if("Feature"==a.type)c=[this.b(a,b)];else if("FeatureCollection"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};
+	Gk.prototype.c=function(a){a=a.crs;var b;a?"name"==a.type?b=Hb(a.properties.name):"EPSG"==a.type?b=Hb("EPSG:"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement("CANVAS"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,"change")};
+	Jk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext("2d");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,"change")};
+	Jk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,"error",this.j,this,!0),R(this.b,"load",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==
+	a.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?
+	a.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if("fraction"==this.l||"fraction"==this.i){if(!b)return null;a=this.g.slice();"fraction"==this.l&&(a[0]*=b[0]);"fraction"==this.i&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};
+	n.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if("top-left"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};
+	n.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,"change",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,"change",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return"Circle"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,"XY",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};
+	n.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,"error",this.ce,this,!0),R(this.a,"load",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;
+	(function(){var a={},b={Aa:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.Aa=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q="function"==typeof require&&require;if(!p&&q)return require(l,!0);if(k)return k(l,!0);q=Error("Cannot find module '"+l+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=
+	a[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k="function"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}
+	function k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],
+	h;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a("quickselect");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,
+	d=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),
+	k=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},
+	ec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;
+	q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,
+	f,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=
+	f,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,
+	d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=["return a"," - b",";"];this.Kb=new Function("a","b",b.join(a[0]));this.Lb=new Function("a","b",b.join(a[1]));this.la=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:
+	1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}
+	function Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,
+	d;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl("addfeature",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,"change",a.vc,a),R(c,"propertychange",a.vc,a)]}
+	function $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl("addfeature",h[d]))}
+	function Zk(a,b){var c=!1;R(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}
+	n.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl("clear"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}
+	n.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};
+	n.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl("changefeature",a))};
+	function Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl("removefeature",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);
+	function el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if("Circle"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],
+	g=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,
+	La("active"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}
+	function hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}
+	function pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}
+	function tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}
+	function ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl("drawstart",a.g))}
+	function nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}
+	function sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));"MultiPoint"===a.P?lk(b,new yk([c])):"MultiLineString"===a.P?lk(b,new xk([c])):"MultiPolygon"===a.P&&lk(b,new zk([c]));U(a,new dl("drawend",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;
+	function ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get("active");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;"Point"===a||"MultiPoint"===a?b=kl:"LineString"===a||"MultiLineString"===a?b=ll:"Polygon"===a||"MultiPolygon"===a?b=jl:"Circle"===a&&(b=rl);return b}var kl="Point",ll="LineString",jl="Polygon",rl="Circle";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||
+	0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};
+	wl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};
+	wl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};
+	wl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,"change",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}
+	function Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=""}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};
+	function Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+"/"+b+"/"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};
+	function Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;
+	function Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join("\n");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}
+	B(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl("tileloadstart",a));break;case 2:U(this,new Fl("tileloadend",a));break;case 3:U(this,new Fl("tileloaderror",a))}};function Hl(a,b,c){a.tileUrlFunction=b;"undefined"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}
+	Gl.prototype.s=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}
+	B(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};
+	n.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,"change",a.v,a);return e}
+	function $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}
+	function Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb("EPSG:3857").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,
+	tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};
+	Ql.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),
+	b==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.h,void 0===
+	e&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):"-",f=this.i?rh(this.i):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!==
+	this.c?this.c.toString():"-")+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==
+	a.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;
+	n.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};
+	n.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y("ol.format.GeoJSON",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y("ol.format.EsriJSON",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y("ol.style.Style",yh);y("ol.style.Circle",ph);y("ol.style.RegularShape",Rl);y("ol.style.Fill",sh);y("ol.style.Stroke",xh);y("ol.style.Icon",Lk);
+	y("ol.style.Text",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:"#333"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y("ol.View",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;
+	uc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y("ol.control.defaults",ee);y("ol.layer.Tile",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;
+	W.prototype.on=W.prototype.Y;y("ol.layer.Vector",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y("ol.source.OSM",Ol);Ol.prototype.refresh=Ol.prototype.Ja;
+	y("ol.source.XYZ",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y("ol.Map",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;
+	Z.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y("ol.source.Vector",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;
+	Xk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y("ol.source.TileArcGISRest",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y("ol.Overlay",gk);gk.prototype.setPosition=gk.prototype.Ac;y("ol.Feature",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y("ol.geom.Point",jc);
+	jc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y("ol.geom.Polygon",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y("ol.geom.LineString",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y("ol.proj.Projection",Eb);Eb.prototype.getCode=Eb.prototype.l;
+	y("ol.interaction.Draw",el);el.prototype.on=el.prototype.Y;y("ol.animation.pan",Dc);y("ol.control.FullScreen",Xd);
+	  return OPENLAYERS.ol;
+	}));
+	
+	
+	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var mapMoveCls_1 = __webpack_require__(8);
+	/**
+	 * The single map move object catch is that it is common to multimap pages
+	 * @type {MapMoveCls}
+	 */
+	exports.mapMove = new mapMoveCls_1.default();
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = exports.mapMove;
+
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var mapInteractionBase_1 = __webpack_require__(9);
+	var checkDefined = __webpack_require__(10);
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * assists with map move interactions, trigger callback functions
+	 * @augments MapInteractionBase
+	 */
+	var MapMoveCls = (function (_super) {
+	    __extends(MapMoveCls, _super);
+	    /**
+	     * constructor called implicitly
+	     */
+	    function MapMoveCls() {
+	        _super.call(this, 'map move');
+	        this._arrLyrRequest = [];
+	        this._arrLyrTimeout = [];
+	        this._arrLayer = [];
+	        this._lookupLayer = {};
+	        this._mapMoveCallbacks = [];
+	        this._mapMoveCallbacksLookup = {};
+	        this._mapMoveCallbackDelays = [];
+	        this._mapMoveCallbackContext = [];
+	        this._mapMoveCallbackTimeout = [];
+	        this._mapExtent = undefined;
+	        this._zoomLevel = undefined;
+	    }
+	    /**
+	     * initialize the map move object
+	     * @param theMap - the ol map
+	     */
+	    MapMoveCls.prototype.init = function (theMap) {
+	        var _this = this;
+	        _super.prototype.init.call(this, theMap);
+	        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);
+	            }
+	        });
+	    };
+	    MapMoveCls.prototype._updateMapExtent = function () {
+	        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]
+	        };
+	    };
+	    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
+	        /**
+	         * return the map extent
+	         */
+	        get: function () {
+	            if (!this._mapExtent) {
+	                this._updateMapExtent();
+	            }
+	            return this._mapExtent;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * Trigger the layer load
+	     * @param lyr the layer being acted on
+	     * @param index index of the layer
+	     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+	     */
+	    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
+	        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 () { };
+	        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+	            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
+	            var _this_1 = this;
+	            callbackFunc = function () {
+	                function innerFunction(theLayer, theIndex) {
+	                    var _innerThis = this;
+	                    this._arrLyrRequest[theIndex] = $.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_1, lyr, index);
+	            };
+	        }
+	        else {
+	            lyr.clear();
+	        }
+	        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+	    };
+	    /**
+	     * trigger the map move call back at the given index
+	     * @param ind - the index of the layer
+	     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+	     * @param functionId=undefined the function id used to reference the added callback function
+	     */
+	    MapMoveCls.prototype.triggerMoveCallback = function (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 () {
+	            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  lyr - layer to add
+	     * @param triggerOnAdd - if the layer should be loaded on add
+	     */
+	    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
+	        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
+	        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);
+	        }
+	    };
+	    /**
+	     * add a callback to the map move event
+	     * @param func - callback function
+	     * @param context - the context to use for this function
+	     * @param delay=50 the delay before call load
+	     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+	     * @param functionId optional id to reference the function later for outside triggering
+	     */
+	    MapMoveCls.prototype.addCallback = function (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 = makeGuid_1.default();
+	        }
+	        this._mapMoveCallbacks.push(func);
+	        this._mapMoveCallbacksLookup[functionId] = functionId;
+	        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);
+	        }
+	    };
+	    return MapMoveCls;
+	}(mapInteractionBase_1.default));
+	exports.MapMoveCls = MapMoveCls;
+	nm.MapMoveCls = MapMoveCls;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapMoveCls;
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 12/8/2015.
+	 */
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * base interaction
+	 */
+	var MapInteractionBase = (function () {
+	    /**
+	     * map interaction base
+	     * @param subtype - the interaction subtype
+	     */
+	    function MapInteractionBase(subtype) {
+	        this._map = null;
+	        this._initialized = false;
+	        this._subtype = subtype;
+	    }
+	    /**
+	     * base initializer, returns true for already initialized
+	     * @param theMap - the ol Map
+	     * @returns true for already initialized
+	     */
+	    MapInteractionBase.prototype.init = function (theMap) {
+	        if (!this._initialized) {
+	            this._map = theMap;
+	            this._initialized = true;
+	        }
+	    };
+	    Object.defineProperty(MapInteractionBase.prototype, "map", {
+	        /**
+	         * get reference to the ol map object
+	         * @returns {ol.Map} the map object
+	         */
+	        get: function () {
+	            return this._map;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
+	        /**
+	         * get if is initialized
+	         * @returns {boolean} is initialized
+	         */
+	        get: function () {
+	            return this._initialized;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * Check the initialization status and throw exception if not valid yet
+	     * @protected
+	     */
+	    MapInteractionBase.prototype._checkInit = function () {
+	        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
+	     */
+	    MapInteractionBase.prototype.checkInit = function () {
+	        this._checkInit();
+	    };
+	    return MapInteractionBase;
+	}());
+	exports.MapInteractionBase = MapInteractionBase;
+	nm.MapInteractionBase = MapInteractionBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapInteractionBase;
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('util.checkDefined');
+	/**
+	 * check if the input is undefined or null
+	 * @param input - input pointer
+	 * @returns true undefined or null
+	 */
+	function undefinedOrNull(input) {
+	    "use strict";
+	    return (typeof input === 'undefined' || input === null);
+	}
+	exports.undefinedOrNull = undefinedOrNull;
+	nm.undefinedOrNull = undefinedOrNull;
+	/**
+	 * check if the input is defined and not null
+	 * @param input - input pointer
+	 * @returns true defined and not null
+	 */
+	function definedAndNotNull(input) {
+	    "use strict";
+	    return !(undefinedOrNull(input));
+	}
+	exports.definedAndNotNull = definedAndNotNull;
+	nm.definedAndNotNull = definedAndNotNull;
+
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('util');
+	/**
+	 * guids are used to uniquely identify groups and features
+	 * @returns {string} a new guid
+	 */
+	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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = makeGuid;
+
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var mapPopupCls_1 = __webpack_require__(13);
+	/**
+	 * The single popup object catch is that it is common to multimap pages
+	 * @type {MapPopupCls}
+	 */
+	exports.mapPopup = new mapPopupCls_1.default();
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = exports.mapPopup;
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var mapInteractionBase_1 = __webpack_require__(9);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('olHelpers');
+	var FeatureLayerProperties = (function () {
+	    /**
+	     *
+	     * @param feature the feature
+	     * @param layer - the layer in the popup
+	     * @param layerIndex - index of the layer
+	     * @param selectionLayer - the ol selection layer
+	     * @param [esriLayerName=undefined] - esri layer name
+	     */
+	    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+	        this.feature = feature;
+	        this.layer = layer;
+	        this.layerIndex = layerIndex;
+	        this.selectionLayer = selectionLayer;
+	        this.popupContent = '';
+	        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+	    }
+	    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
+	        get: function () {
+	            if (typeof this.esriLayerName == 'string') {
+	                return this.esriLayerName;
+	            }
+	            else {
+	                return this.layer.name;
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return FeatureLayerProperties;
+	}());
+	exports.FeatureLayerProperties = FeatureLayerProperties;
+	/**
+	 * map popup class
+	 * @augments MapInteractionBase
+	 */
+	var MapPopupCls = (function (_super) {
+	    __extends(MapPopupCls, _super);
+	    /**
+	     * Definition for openlayers style function
+	     * @callback olStyleFunction
+	     * &param feature the openlayers vector feature
+	     * $param
+	     */
+	    /**
+	     * map popup constructor
+	     */
+	    function MapPopupCls() {
+	        _super.call(this, 'map popup');
+	        this._arrPopupLayerIds = [];
+	        this._arrPopupLayerNames = [];
+	        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 = [];
+	        this._esriMapServiceLayers = [];
+	        this._popupOpen = false;
+	        this._popupCoordinate = null;
+	        this._passThroughLayerFeatureArray = [];
+	        this._currentPopupIndex = -1;
+	        this._popupContentLength = 0;
+	    }
+	    /**
+	     * map popup initialization
+	     * @param {ol.Map} theMap - the ol map
+	     */
+	    MapPopupCls.prototype.init = function (theMap) {
+	        var _this = this;
+	        _super.prototype.init.call(this, theMap);
+	        var $map;
+	        var target = this.map.getTarget();
+	        if (typeof target == 'string') {
+	            $map = $('#' + target);
+	        }
+	        else {
+	            $map = $(target);
+	        }
+	        $map.append('<div class="ol-popup">' +
+	            '<span class="ol-popup-closer">X</span>' +
+	            '<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 custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true,
+	            autoPanAnimation: {
+	                duration: 250,
+	                source: theMap.getView().getCenter()
+	            } });
+	        this._map.addOverlay(this._popupOverlay);
+	        this._$popupCloser.click(function (evt) {
+	            _this.closePopup();
+	        });
+	        // display popup on click
+	        this._map.on('singleclick', function (evt) {
+	            _this.closePopup();
+	            _this._popupCoordinate = evt['coordinate'];
+	            // esri map service layers
+	            if (_this._esriMapServiceLayers.length > 0) {
+	                var queryParams = {
+	                    geometry: evt['coordinate'].join(','),
+	                    geometryType: 'esriGeometryPoint',
+	                    layers: 'all',
+	                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
+	                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
+	                    imageDisplay: _this._map.getSize().join(',') + ',96',
+	                    returnGeometry: true,
+	                    tolerance: 15,
+	                    f: 'pjson'
+	                };
+	                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
+	                    var l = _a[_i];
+	                    l.getPopupInfo(queryParams);
+	                }
+	            }
+	            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
+	            _this._passThroughLayerFeatureArray = [];
+	            _this._currentPopupIndex = -1;
+	            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+	                var featObj = layerFeatureObjectArray[i];
+	                var props = featObj.feature.getProperties();
+	                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
+	                //skip if return was false
+	                if (popupContentResponse === false) {
+	                }
+	                else if (typeof popupContentResponse == 'string') {
+	                    featObj.popupContent = popupContentResponse;
+	                    _this._passThroughLayerFeatureArray.push(featObj);
+	                }
+	                else {
+	                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
+	                }
+	            }
+	            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
+	            _this._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;\">" + _this._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>';
+	            _this._$popupContent.html(popupHtml);
+	            _this._$popupContent.find('.previous-popup').click(function () {
+	                if (_this._popupContentLength == 1) {
+	                    return;
+	                }
+	                if (_this._currentPopupIndex == 0) {
+	                    _this._currentPopupIndex = _this._popupContentLength - 1;
+	                }
+	                else {
+	                    _this._currentPopupIndex--;
+	                }
+	                _this._triggerFeatSelect();
+	            });
+	            var nextPopup = _this._$popupContent.find('.next-popup');
+	            nextPopup.click(function () {
+	                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
+	                    return;
+	                }
+	                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
+	                    _this._currentPopupIndex = 0;
+	                }
+	                else {
+	                    _this._currentPopupIndex++;
+	                }
+	                _this._triggerFeatSelect();
+	            });
+	            if (_this._popupContentLength > 0) {
+	                nextPopup.trigger('click');
+	                _this._popupOverlay.setPosition(_this._popupCoordinate);
+	                _this._$popupContent.scrollTop(0);
+	                _this._popupOpen = true;
+	            }
+	        });
+	        //change mouse cursor when over marker
+	        this._map.on('pointermove', function (evt) {
+	            if (evt['dragging']) {
+	                return;
+	            }
+	            var pixel = _this.map.getEventPixel(evt['originalEvent']);
+	            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+	                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
+	                    var olLayer = _a[_i];
+	                    if (lyrCandidate == olLayer) {
+	                        return true;
+	                    }
+	                }
+	                return false;
+	            });
+	            var mapElement = _this.map.getTargetElement();
+	            mapElement.style.cursor = hit ? 'pointer' : '';
+	        });
+	        return true;
+	    };
+	    /**
+	     * helper to select features
+	     * @private
+	     */
+	    MapPopupCls.prototype._triggerFeatSelect = function () {
+	        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);
+	        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
+	            var f = _a[_i];
+	            f(this._$popupContent);
+	        }
+	    };
+	    /**
+	     *
+	     * @param feature - the ol feature
+	     * @param {LayerEsriMapServer} lyr - the map server layer
+	     * @param {string} popupContent - popup content
+	     * @param {string} esriName - esri layer name
+	     */
+	    MapPopupCls.prototype.addMapServicePopupContent = function (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++;
+	        $('.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  pixel - the ol pixel
+	     * @returns  feature layer properties
+	     * @private
+	     */
+	    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
+	        var _this = this;
+	        var layerFeatureObjectArray = [];
+	        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+	            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
+	            if (lyrIndex > -1) {
+	                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
+	            }
+	        });
+	        return layerFeatureObjectArray;
+	    };
+	    MapPopupCls.prototype.closePopup = function () {
+	        this._checkInit();
+	        this._popupOpen = false;
+	        this._popupOverlay.setPosition(undefined);
+	        this._$popupCloser[0].blur();
+	        this.clearSelection();
+	        this._$popupContent.html('');
+	        return false;
+	    };
+	    ;
+	    /**
+	     *
+	     * @param chgFunction - popup change function
+	     */
+	    MapPopupCls.prototype.addPopupChangedFunction = function (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  the new selection layer
+	     * @private
+	     */
+	    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
+	        this._checkInit();
+	        selectionStyle = selectionStyle || {};
+	        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+	        selectionStyle.width = selectionStyle.width || 10;
+	        var theStyle;
+	        if (selectionStyle.olStyle) {
+	            theStyle = selectionStyle.olStyle;
+	        }
+	        else {
+	            theStyle = new custom_ol_1.ol.style.Style({
+	                stroke: new custom_ol_1.ol.style.Stroke({
+	                    color: selectionStyle.color,
+	                    width: selectionStyle.width
+	                }),
+	                image: new custom_ol_1.ol.style.Circle({
+	                    radius: 7,
+	                    fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }),
+	                    stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 })
+	                }),
+	                fill: new custom_ol_1.ol.style.Fill({
+	                    color: selectionStyle.color
+	                })
+	            });
+	        }
+	        var selectionLayer = new custom_ol_1.ol.layer.Vector({
+	            source: new custom_ol_1.ol.source.Vector(),
+	            style: theStyle,
+	            zIndex: 100
+	        });
+	        this._selectionLayers.push(selectionLayer);
+	        this._selectionLayerLookup[lyr.id] = selectionLayer;
+	        this.map.addLayer(selectionLayer);
+	        return selectionLayer;
+	    };
+	    /**
+	     * 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
+	     */
+	    MapPopupCls.prototype.addVectorPopup = function (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;
+	    };
+	    ;
+	    /**
+	     *
+	     * @param {LayerBase} lyr - layer
+	     */
+	    MapPopupCls.prototype.removeVectorPopup = function (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
+	     */
+	    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
+	        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+	        this._esriMapServiceLayers.push(lyr);
+	        return selectionLayer;
+	    };
+	    MapPopupCls.prototype.clearSelection = function () {
+	        this._checkInit();
+	        for (var i = 0; i < this._selectionLayers.length; i++) {
+	            this._selectionLayers[i].getSource().clear();
+	        }
+	        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
+	            var f = _a[_i];
+	            f();
+	        }
+	    };
+	    ;
+	    /**
+	     * Add a function to be called when the map is clicked but before any popups are implemented
+	     * @param {function} func - the map click function
+	     */
+	    MapPopupCls.prototype.addMapClickFunction = function (func) {
+	        this._mapClickFunctions.push(func);
+	    };
+	    return MapPopupCls;
+	}(mapInteractionBase_1.default));
+	nm.MapPopupCls = MapPopupCls;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapPopupCls;
+
+
+/***/ },
+/* 14 */,
+/* 15 */,
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var zoomResolutionConvert = __webpack_require__(17);
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	/**
+	 * 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) {
+	        if (options === void 0) { options = {}; }
+	        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 || makeGuid_1.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;
+	        /**
+	         *
+	         * @protected
+	         */
+	        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
+	     */
+	    LayerBase.prototype._load = function () {
+	        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
+	     */
+	    LayerBase.prototype.getLegendDiv = function () {
+	        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
+	     */
+	    LayerBase.prototype._addLegendContent = function (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 = $("#" + 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
+	     */
+	    LayerBase.prototype.addLegendContent = function (additionalContent) {
+	        this._addLegendContent(additionalContent);
+	    };
+	    LayerBase.prototype.applyCollapse = function () {
+	        if (this._applyCollapseCalled) {
+	            console.log('collapse already applied');
+	            return undefined;
+	        }
+	        this._$legendDiv = $("#" + 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 = $(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
+	     */
+	    LayerBase.prototype.refresh = function () {
+	        if (this.source) {
+	            this.source.refresh();
+	        }
+	    };
+	    Object.defineProperty(LayerBase.prototype, "legendContent", {
+	        /**
+	         * get the legend content
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._legendContent;
+	        },
+	        /**
+	         * set the legend content directly
+	         * @param {string} newVal - new content
+	         * @protected
+	         */
+	        set: function (newVal) {
+	            this._legendContent = newVal;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "params", {
+	        /**
+	         * get the map get params
+	         * @type {object}
+	         */
+	        get: function () {
+	            return this._params;
+	        },
+	        /**
+	         * set the map get params
+	         * @param {object} newParams - new get params
+	         * @protected
+	         */
+	        set: function (newParams) {
+	            this._params = newParams;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "minResolution", {
+	        /**
+	         * get the minimum resolution
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._minResolution;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "maxResolution", {
+	        /**
+	         * get the maximum resolution
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._maxResolution;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "minZoom", {
+	        /**
+	         * get min zoom
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._minZoom;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "maxZoom", {
+	        /**
+	         * get max zoom
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._maxZoom;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "url", {
+	        /**
+	         * get the url
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._url;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "visible", {
+	        /**
+	         * Get the layer visibility
+	         * @type {boolean}
+	         */
+	        get: function () {
+	            return this._visible;
+	        },
+	        /**
+	         * set the visibility
+	         * @param visibility
+	         */
+	        set: function (visibility) {
+	            this.setVisible(visibility);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.setVisible = function (visibility) {
+	        this._visible = visibility;
+	        if (this.olLayer) {
+	            this.olLayer.setVisible(this._visible);
+	            if (visibility && !this._loaded) {
+	                this._load();
+	            }
+	        }
+	    };
+	    Object.defineProperty(LayerBase.prototype, "opacity", {
+	        /**
+	         * Get the layer opacity
+	         * @type {number}
+	         */
+	        get: function () {
+	            return this._opacity;
+	        },
+	        /**
+	         * Set the layer opacity
+	         * @param {number} opacity - layer opacity
+	         */
+	        set: function (opacity) {
+	            this._opacity = opacity;
+	            if (this.olLayer) {
+	                this.olLayer.setOpacity(this._opacity);
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "name", {
+	        /**
+	         * Get the layer name
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._name;
+	        },
+	        /**
+	         * set the layer name
+	         * @param {string} newName - the new name
+	         */
+	        set: function (newName) {
+	            this._name = newName;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "loaded", {
+	        /**
+	         * Check if the layer is loaded
+	         * @type {boolean}
+	         */
+	        get: function () {
+	            return this._loaded;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "source", {
+	        /**
+	         * get the layer source
+	         * @type {*}
+	         */
+	        get: function () {
+	            return this.getSource();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.getSource = function () {
+	        return this._source;
+	    };
+	    Object.defineProperty(LayerBase.prototype, "zIndex", {
+	        /**
+	         * get the z index
+	         */
+	        get: function () {
+	            return this._zIndex;
+	        },
+	        /**
+	         * set the z index
+	         */
+	        set: function (newZ) {
+	            this._zIndex = newZ;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.setZIndex = function (newZ) {
+	    };
+	    Object.defineProperty(LayerBase.prototype, "olLayer", {
+	        /**
+	         * the the ol layer
+	         */
+	        get: function () {
+	            return this.getOlLayer();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.getOlLayer = function () {
+	        return this._olLayer;
+	    };
+	    return LayerBase;
+	}());
+	exports.LayerBase = LayerBase;
+	nm.LayerBase = LayerBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerBase;
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/14/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('olHelpers.zoomResolutionConvert');
+	var _zoomResLookup = [
+	    156543.03392804097,
+	    78271.51696402048,
+	    39135.75848201024,
+	    19567.87924100512,
+	    9783.93962050256,
+	    4891.96981025128,
+	    2445.98490512564,
+	    1222.99245256282,
+	    611.49622628141,
+	    305.748113140705,
+	    152.8740565703525,
+	    76.43702828517625,
+	    38.21851414258813,
+	    19.109257071294063,
+	    9.554628535647032,
+	    4.777314267823516,
+	    2.388657133911758,
+	    1.194328566955879,
+	    0.5971642834779395,
+	    0.29858214173896974,
+	    0.14929107086948487,
+	    0.07464553543474244,
+	    0.03732276771737122,
+	    0.01866138385868561,
+	    0.009330691929342804,
+	    0.004665345964671402,
+	    0.002332672982335701,
+	    0.0011663364911678506,
+	    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;
+	    }
+	}
+	exports.zoomToResolution = zoomToResolution;
+	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;
+	}
+	exports.resolutionToZoom = resolutionToZoom;
+	nm.resolutionToZoom = resolutionToZoom;
+
+
+/***/ },
+/* 18 */,
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/14/2015.
+	 */
+	"use strict";
+	var colors = __webpack_require__(20);
+	var provide_1 = __webpack_require__(4);
+	var LayerItsInventory_1 = __webpack_require__(21);
+	var nm = provide_1.default('collections');
+	var itsConfig = [
+	    {
+	        name: 'Camera',
+	        itsType: 'cctv',
+	        minZoom: 11,
+	        itsIconConfig: {
+	            prop: 'owner',
+	            defaultName: 'WisDOT',
+	            defaultIcon: 'cctv.png',
+	            iconArray: [
+	                ['City of Madison', 'Madison', 'cctv-mad.png']
+	            ]
+	        }
+	    },
+	    {
+	        name: 'Message Signs',
+	        itsType: 'DMS',
+	        minZoom: 11,
+	        itsIconConfig: {
+	            prop: 'dmsType',
+	            defaultName: 'DMS',
+	            defaultIcon: 'dms.png',
+	            iconArray: [
+	                ['pcms', 'PCMS', 'pcms.png']
+	            ]
+	        }
+	    },
+	    { name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false },
+	    { 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) {
+	        this._map = theMap;
+	        this._layers = [];
+	        exclude = 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 LayerItsInventory_1.default(lyrConfig);
+	                this._map.addLayer(inventLyr.olLayer);
+	                this._layers.push(inventLyr);
+	            }
+	        }
+	    }
+	    Object.defineProperty(ItsLayerCollection.prototype, "layers", {
+	        /**
+	         * Return the array of layers in this collection
+	         * @returns {Array<LayerItsInventory>} an array of layers
+	         */
+	        get: function () {
+	            return this._layers;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return ItsLayerCollection;
+	}());
+	exports.ItsLayerCollection = ItsLayerCollection;
+	nm.ItsLayerCollection = ItsLayerCollection;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = ItsLayerCollection;
+
+
+/***/ },
+/* 20 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	var provide_1 = __webpack_require__(4);
+	var chk = __webpack_require__(10);
+	var nm = provide_1.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();
+	}
+	exports.rgb2hex = rgb2hex;
+	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 + ")";
+	    }
+	}
+	exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
+	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(',');
+	}
+	exports.rgbToRgba = rgbToRgba;
+	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, g, b;
+	        var ratio;
+	        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 + ')';
+	    };
+	}
+	exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
+	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;
+	        if (theVal == null) {
+	            zScore = null;
+	        }
+	        else {
+	            zScore = (theVal - median) / stdDev;
+	        }
+	        return grd(zScore);
+	    };
+	}
+	exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+	nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/8/2015.
+	 */
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var LayerBaseVectorGeoJson_1 = __webpack_require__(22);
+	var mapPopup_1 = __webpack_require__(12);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	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 == 'object') {
+	        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
+	        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
+	        configCount++;
+	    }
+	    if (typeof itsIconConfig == 'object') {
+	        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
+	        if (typeof itsIconConfig.iconArray == 'undefined') {
+	            itsIconConfig.iconArray = [];
+	        }
+	        configCount++;
+	    }
+	    if (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 custom_ol_1.ol.style.Style({
+	            image: new custom_ol_1.ol.style.Icon({
+	                src: _iconUrlRoot + itsIcon,
+	                crossOrigin: 'anonymous'
+	            })
+	        });
+	    }
+	    else if (itsLineStyle) {
+	        return new custom_ol_1.ol.style.Style({
+	            stroke: new custom_ol_1.ol.style.Stroke({
+	                color: itsLineStyle.color,
+	                width: itsLineStyle.width
+	            })
+	        });
+	    }
+	    else if (itsIconConfig) {
+	        return function (feature, resolution) {
+	            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 custom_ol_1.ol.style.Style({
+	                    image: new custom_ol_1.ol.style.Icon({
+	                        src: iconUrl,
+	                        crossOrigin: 'anonymous'
+	                    })
+	                })];
+	        };
+	    }
+	    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 custom_ol_1.ol.style.Style({
+	                    stroke: new custom_ol_1.ol.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>';
+	        for (var _i = 0, _a = itsIconConfig.iconArray; _i < _a.length; _i++) {
+	            var a = _a[_i];
+	            outHtml += "<li><span class=\"legend-layer-subitem\">" + a[1] + "</span><img src=\"" + (_iconUrlRoot + a[2]) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
+	        }
+	        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>';
+	        for (var _b = 0, _c = itsLineConfig.lineArray; _b < _c.length; _b++) {
+	            var ls = _c[_b];
+	            outHtml += ("<li><span class=\"legend-layer-subitem\">" + ls[1] + "</span>") +
+	                ("<hr style=\"height: " + ls[3] + "px; background-color: " + ls[2] + "\">");
+	        }
+	        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 (_super) {
+	    __extends(LayerItsInventory, _super);
+	    /**
+	     * 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) {
+	        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 : {};
+	        $.extend(options.params, { format: 'JSON', resource: options.itsType });
+	        _super.call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options);
+	        //add any additional content to the legend
+	        this.addLegendContent(addToLegend);
+	        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
+	        if (options.addPopup) {
+	            mapPopup_1.default.addVectorPopup(this, function (props) {
+	                return ("<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=" + props['featureGuid'] + "\" ") +
+	                    "height=\"250\" width=\"350\"></iframe>";
+	            });
+	        }
+	    }
+	    /**
+	     * 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
+	     */
+	    LayerItsInventory.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
+	        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);
+	        var lowerLeft = new custom_ol_1.ol.geom.Point([extent.minX, extent.minY]);
+	        lowerLeft.transform(this.mapProj, this._projection4326);
+	        var lowerLeftCoordinates = lowerLeft.getCoordinates();
+	        var upperRight = new custom_ol_1.ol.geom.Point([extent.maxX, extent.maxY]);
+	        upperRight.transform(this.mapProj, this._projection4326);
+	        var upperRightCoordinates = upperRight.getCoordinates();
+	        $.extend(this.mapMoveParams, {
+	            L: lowerLeftCoordinates[0],
+	            R: upperRightCoordinates[0],
+	            B: lowerLeftCoordinates[1],
+	            T: upperRightCoordinates[1]
+	        });
+	    };
+	    return LayerItsInventory;
+	}(LayerBaseVectorGeoJson_1.default));
+	nm.LayerItsInventory = LayerItsInventory;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerItsInventory;
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/2/2015.
+	 */
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var LayerBaseVector_1 = __webpack_require__(23);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	/**
+	 * The Vector GeoJson Layer
+	 * @augments LayerBaseVector
+	 */
+	var LayerBaseVectorGeoJson = (function (_super) {
+	    __extends(LayerBaseVectorGeoJson, _super);
+	    /**
+	     * @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) {
+	        url = typeof url == 'string' ? url : '';
+	        _super.call(this, url, options);
+	        this._geoJsonFormat = new custom_ol_1.ol.format.GeoJSON();
+	        this._transform = options.transform || { dataProjection: "EPSG:4326", featureProjection: "EPSG:3857" };
+	        if (this.autoLoad || this.visible) {
+	            this._load();
+	        }
+	    }
+	    /**
+	     * add feature collection
+	     * @param {object} featureCollection - as geojson object
+	     */
+	    LayerBaseVectorGeoJson.prototype.addFeatures = function (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
+	     */
+	    LayerBaseVectorGeoJson.prototype._load = function () {
+	        var _this = this;
+	        if (_super.prototype._load.call(this)) {
+	            return true;
+	        }
+	        $.get(this._url, this._params, function (d) {
+	            _this.addFeatures(d);
+	            _this.loadCallback(_this);
+	        }, 'json').fail(function () {
+	            this._loaded = false;
+	        });
+	        return false;
+	    };
+	    /**
+	     * callback function on map move
+	     * @param {object} d the json response
+	     * @override
+	     */
+	    LayerBaseVectorGeoJson.prototype.mapMoveCallback = function (d) {
+	        _super.prototype.mapMoveCallback.call(this, d);
+	        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
+	    };
+	    return LayerBaseVectorGeoJson;
+	}(LayerBaseVector_1.LayerBaseVector));
+	nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerBaseVectorGeoJson;
+
+
+/***/ },
+/* 23 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var LayerBase_1 = __webpack_require__(16);
+	var mapMove_1 = __webpack_require__(7);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var $ = __webpack_require__(3);
+	var g = new custom_ol_1.ol.Map({});
+	var nm = provide_1.default('layers');
+	/**
+	 * The Vector layer base
+	 * @augments LayerBase
+	 * @abstract
+	 */
+	var LayerBaseVector = (function (_super) {
+	    __extends(LayerBaseVector, _super);
+	    /**
+	     * 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) {
+	        if (options === void 0) { options = {}; }
+	        _super.call(this, url, options);
+	        options = options;
+	        //prevent regular load if no url has been provided
+	        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 ? mapMove_1.default : undefined;
+	        }
+	        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
+	            function () { return {}; };
+	        if (this._onDemand) {
+	            this._loaded = true;
+	            this._mapMoveParams = {};
+	            this._mapMove.checkInit();
+	            this._mapMove.addVectorLayer(this);
+	        }
+	        this._source = new custom_ol_1.ol.source.Vector();
+	        this._olLayer = new custom_ol_1.ol.layer.Vector({
+	            source: this._source,
+	            visible: this.visible,
+	            style: this.style,
+	            minResolution: this._minResolution,
+	            maxResolution: this._maxResolution,
+	            zIndex: this._zIndex
+	        });
+	        this._projectionMap = null;
+	        this._projection4326 = new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+	    }
+	    /**
+	     * dummy to be overridden
+	     * @param {object} featureCollection - geojson or esrijson object
+	     */
+	    LayerBaseVector.prototype.addFeatures = function (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
+	     */
+	    LayerBaseVector.prototype.mapMoveBefore = function (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
+	     */
+	    LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
+	        this._mapMoveParams = {};
+	        $.extend(this._mapMoveParams, this.params);
+	        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
+	    };
+	    /**
+	     * callback function on map move
+	     * @param {object} d - the json response
+	     */
+	    LayerBaseVector.prototype.mapMoveCallback = function (d) {
+	        if (this.source) {
+	            this._source.clear();
+	        }
+	    };
+	    /**
+	     * clear features in the layer
+	     */
+	    LayerBaseVector.prototype.clear = function () {
+	        if (this._source) {
+	            this._source.clear();
+	        }
+	    };
+	    Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", {
+	        /**
+	         * get on demand delay in miliseconds
+	         */
+	        get: function () {
+	            return this._onDemandDelay;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "autoLoad", {
+	        /**
+	         * get if the layer is autoloaded
+	         */
+	        get: function () {
+	            return this._autoLoad;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "style", {
+	        /**
+	         * get the style definition
+	         */
+	        get: function () {
+	            return this._style;
+	        },
+	        /**
+	         * set the style
+	         * @param style - the style or function
+	         */
+	        set: function (style) {
+	            this._style = style;
+	            this.olLayer.setStyle(this._style);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "mapCrs", {
+	        /**
+	         * get the map CRS if it is defined by the map move object
+	         */
+	        get: function () {
+	            return this.mapProj == null ? null : this.mapProj.getCode();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "mapProj", {
+	        get: function () {
+	            if (this._projectionMap != null) {
+	                return this._projectionMap;
+	            }
+	            if (this._mapMove) {
+	                this._projectionMap = this._mapMove.map.getView().getProjection();
+	                return this._projectionMap;
+	            }
+	            else {
+	                return null;
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "mapMove", {
+	        /**
+	         * get the map move object
+	         * @type {MapMoveCls|*}
+	         */
+	        get: function () {
+	            return this._mapMove;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", {
+	        /**
+	         * map move params
+	         * @type {object}
+	         */
+	        get: function () {
+	            return this._mapMoveParams;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "visible", {
+	        get: function () {
+	            return this._visible;
+	        },
+	        /**
+	         * Set the layer visibility
+	         * @type {boolean}
+	         * @override
+	         */
+	        set: function (visibility) {
+	            _super.prototype.setVisible.call(this, visibility);
+	            if (this._onDemand) {
+	                this.mapMove.triggerLyrLoad(this);
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "source", {
+	        /**
+	         * get the layer vector source
+	         * @override
+	         */
+	        get: function () {
+	            return this.getSource();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "features", {
+	        /**
+	         * array of ol features
+	         */
+	        get: function () {
+	            return this.source.getFeatures();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBaseVector.prototype, "olLayer", {
+	        /**
+	         *
+	         */
+	        get: function () {
+	            return _super.prototype.getOlLayer.call(this);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBaseVector.prototype.setZIndex = function (newZ) {
+	        this.olLayer.setZIndex(newZ);
+	    };
+	    return LayerBaseVector;
+	}(LayerBase_1.LayerBase));
+	exports.LayerBaseVector = LayerBaseVector;
+	nm.LayerBaseVector = LayerBaseVector;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerBaseVector;
+
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/16/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var mapMove_1 = __webpack_require__(7);
+	var nm = provide_1.default('collections');
+	var $ = __webpack_require__(3);
+	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) {
+	        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 = makeGuid_1.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
+	     */
+	    LayerGroup.prototype.addGroup = function (groupConfig, parents) {
+	        var parent;
+	        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
+	     */
+	    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {
+	        var parent;
+	        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;
+	    };
+	    LayerGroup.prototype.getLegendHtml = function (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
+	     */
+	    LayerGroup.prototype._buildLegend = function (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 {boolean} [options.scaleDependent=true] if legend display is scale dependent
+	     */
+	    function LayerLegend(legendItems, divId, options) {
+	        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {
+	            var i = legendItems_1[_i];
+	            if (typeof i == 'undefined') {
+	                throw 'undefined item passed in array to legend constructor';
+	            }
+	        }
+	        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) {
+	            mapMove_1.default.checkInit();
+	        }
+	        this.$divElement = $('#' + divId);
+	        this._legendItems = legendItems;
+	        this.layerGroup = new LayerGroup();
+	        this._buildTree(legendItems);
+	        this.legendId = makeGuid_1.default();
+	        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
+	        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {
+	            var l = _b[_a];
+	            l.applyCollapse();
+	        }
+	        var _this = this;
+	        //// if legend display is scale dependent, make sure the mapMove object is initialized first
+	        if (options.scaleDependent) {
+	            mapMove_1.default.checkInit();
+	            mapMove_1.default.addCallback(function (ext, zoom, evt) {
+	                if (typeof evt == 'undefined' || evt == 'change:resolution') {
+	                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {
+	                        var lyr = _a[_i];
+	                        var $lyrLi = $('#' + lyr.id + '-layer-li');
+	                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
+	                            $lyrLi.addClass('layer-not-visible');
+	                        }
+	                        else {
+	                            $lyrLi.removeClass('layer-not-visible');
+	                        }
+	                    }
+	                }
+	            }, this, 100, true, 'legend1');
+	        }
+	        // <editor-fold desc="add event listeners">
+	        this.$divElement.find(".suppress-by-extent").change(function () {
+	            var legendLayerLis = $('.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 () {
+	            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
+	        });
+	        this.$divElement.find('.layer-group-expander').click(function () {
+	            var $this = $(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
+	     */
+	    LayerLegend.prototype._buildTree = function (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);
+	    };
+	    return LayerLegend;
+	}());
+	nm.LayerLegend = LayerLegend;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerLegend;
+
+
+/***/ }
+/******/ ]);
+//# sourceMappingURL=itsMap.js.map
\ No newline at end of file
diff --git a/test-html/js/itsMap.js.map b/test-html/js/itsMap.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6206ca1ba06287cdd0e11fbb049e38484ec610ff
--- /dev/null
+++ b/test-html/js/itsMap.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8*","webpack:///./src-ts/_test/itsMap.ts","webpack:///./src-ts/olHelpers/quickMap.ts?6966","webpack:///./src-ts/olHelpers/quickMapBase.ts?cef3","webpack:///./~/jquery/dist/jquery.js?89fd","webpack:///./src-ts/util/provide.ts?c446","webpack:///./~/custom-ol/lib/index.js?e25d","webpack:///./~/custom-ol/ol/ol-build.js?ed33","webpack:///./src-ts/olHelpers/mapMove.ts?0e57","webpack:///./src-ts/olHelpers/mapMoveCls.ts?c02e","webpack:///./src-ts/olHelpers/mapInteractionBase.ts?686c","webpack:///./src-ts/util/checkDefined.ts?efb5","webpack:///./src-ts/util/makeGuid.ts?7a49","webpack:///./src-ts/olHelpers/mapPopup.ts?f7f4","webpack:///./src-ts/olHelpers/mapPopupCls.ts?19d5","webpack:///./src-ts/layers/LayerBase.ts?ca1c","webpack:///./src-ts/olHelpers/zoomResolutionConvert.ts?51f3","webpack:///./src-ts/collections/ItsLayerCollection.ts","webpack:///./src-ts/util/colors.ts","webpack:///./src-ts/layers/LayerItsInventory.ts","webpack:///./src-ts/layers/LayerBaseVectorGeoJson.ts","webpack:///./src-ts/layers/LayerBaseVector.ts","webpack:///./src-ts/collections/LayerLegend.ts"],"names":[],"mappings":"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EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;SACrB,oCAAoC;SACpC,GAAG,CAAC,UAAU,CAAC,IAAI,cAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;KAED,MAAM,CAAC,GAAG,CAAC;AACf,EAAC;AAxEe,qBAAY,eAwE3B;AAED,GAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;mBAAe,YAAY,CAAC;;;;;;;AC/G5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE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","file":"itsMap.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n// import 'babel-polyfill/dist/polyfill.min';\r\nimport ItsLayerCollection from '../collections/ItsLayerCollection';\r\nimport LayerLegend from '../collections/LayerLegend';\r\nimport quickMap from '../olHelpers/quickMap';\r\n\r\nlet map = quickMap();\r\n\r\nwindow['map'] = map;\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\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\nconsole.log('it works');\r\nconsole.log('it works');\r\nconsole.log('it works');\r\nconsole.log('it works');\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/itsMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, 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\nimport {ol} from 'custom-ol'\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 the ol map\r\n */\r\nexport function quickMap(options? : quickMapOptions): ol.Map {\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\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 [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options?: quickMapOptions): ol.Map {\r\n    options = options || {} as quickMapOptions;\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, 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        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"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],\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        //TODO add full screen options to ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMapBase.ts\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\"use strict\";\r\nexports.ol = require('../ol/ol-build');\r\n// // export default require('../ol/ol-build');\r\n//\r\n// const fish = 10;\r\n// export = fish;\r\n//\r\n//\r\n// export function cat(bird: string){\r\n//     console.log('eat the fish')\r\n// }\r\n//\r\n// export function nice(eat: number){\r\n//     console.log('eat that fish');\r\n// }\r\n//\r\n// export class Big{\r\n//     glenn: string;\r\n//\r\n//     constructor(isGlenn){\r\n//         this.glenn  = isGlenn;\r\n//     }\r\n//\r\n//     set isGlenn(f: string){\r\n//         console.log(this.glenn)\r\n//     }\r\n//\r\n//     run(){\r\n//         console.log(this.glenn + \" can run\");\r\n//     }\r\n// }\r\n//\r\n// export namespace HereIt{\r\n//\r\n//     export class Big2 {\r\n//         glenn: string;\r\n//\r\n//         constructor(isGlenn) {\r\n//             this.glenn = isGlenn;\r\n//         }\r\n//\r\n//         set isGlenn(f: string) {\r\n//             console.log(this.glenn)\r\n//         }\r\n//\r\n//         run() {\r\n//             console.log(this.glenn + \" can run\");\r\n//         }\r\n//     }\r\n//\r\n//\r\n// } \r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/lib/index.js\n ** module id = 5\n ** module chunks = 1 2 5\n **/","// OpenLayers 3. See http://openlayers.org/\r\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\r\n;(function (root, factory) {\r\n  if (typeof exports === \"object\") {\r\n    module.exports = factory();\r\n  } else if (typeof define === \"function\" && define.amd) {\r\n    define([], factory);\r\n  } else {\r\n    root.ol = factory();\r\n  }\r\n}(this, function () {\r\n  var OPENLAYERS = {};\r\n  var n,aa=this;\r\nfunction ba(){var a=aa.setImmediate,b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}\r\nfunction ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split(\".\"),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript(\"var \"+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if(\"undefined\"!==typeof window)var K=window;else\"undefined\"!==typeof global?K=global:\"undefined\"!==typeof self&&(K=self);function ha(a){this.message=\"Assertion failed. See /doc/errors/#\"+a+\" for details.\";this.code=a;this.name=\"AssertionError\"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;\"cosh\"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa=\"function\"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}\r\nfunction xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}\r\nfunction M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c=\"deleteIndex\"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c=\"string\"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};\r\nfunction Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,\"change\")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]=\"change:\"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja(\"propertychange\",a,c))))};\r\nV.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}\r\nfunction Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}\r\nfunction jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}\r\nfunction nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}\r\nfunction ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}\r\nfunction qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/*\r\n\r\n Latitude/longitude spherical geodesy formulae taken from\r\n http://www.movable-type.co.uk/scripts/latlong.html\r\n Licensed under CC-BY-3.0.\r\n*/\r\nfunction Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}\r\nAb.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db[\"us-ft\"]=1200/3937;\r\nfunction Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if(\"function\"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);\r\nelse{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if(\"degrees\"==this.a)return a;var c=Mb(this,Hb(\"EPSG:4326\")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};\r\nEb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?\"string\"===typeof a?Hb(a):a:Hb(\"EPSG:3857\")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}\r\nfunction Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if(\"string\"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&\"function\"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}\r\nfunction Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c=\"XY\";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;\"XY\"==a?b=2:\"XYZ\"==a||\"XYM\"==a?b=3:\"XYZM\"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};\r\nn.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c=\"XY\";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e=\"XY\":3==c?e=\"XYZ\":4==c&&(e=\"XYZM\");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};\r\nn.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};\r\nn.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=\r\na[b+m*d],f[g++]=a[b+m*d+1]);return g}\r\nfunction hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=\r\nz,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LinearRing\"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return\"Point\"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,\"XY\",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}\r\nfunction oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}\r\nfunction sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,\"XY\",b,c);return a};n.$=function(){return\"Polygon\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,\"XY\",null,this.ja)};\r\nfunction rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;\r\nvoid 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:\"number\"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,\r\na.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};\r\nfunction yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};\r\nn.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,\"XY\",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),\r\nl=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};\r\nn.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc=\"center\",wc=\"resolution\",xc=\"rotation\";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}\r\nfunction Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}\r\nfunction Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:\r\nthis.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};\r\nMc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}\r\nfunction Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}\r\nfunction Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get(\"length\");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get(\"length\")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};\r\nfunction fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set(\"length\",a.a.length)}var hd=\"add\",id=\"remove\";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ld=/^(?: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,md=/^([a-z]*)$/i;function nd(a){if(\"string\"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a=\"rgba(\"+b+\",\"+c+\",\"+d+\",\"+(void 0===a[3]?1:a[3])+\")\"}return a}\r\nvar pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement(\"div\"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,\r\nd=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return\"string\"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=\"\"}function xd(a){return-1!=ud.indexOf(a)};var yd=xd(\"Opera\"),zd=xd(\"Trident\")||xd(\"MSIE\"),Ad=xd(\"Edge\"),Bd=xd(\"Gecko\")&&!(-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"))&&!(xd(\"Trident\")||xd(\"MSIE\"))&&!xd(\"Edge\"),Cd=-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"),Dd;\r\na:{var Ed=\"\",Fd=function(){var a=ud;if(Bd)return/rv\\:([^\\);]+)(\\)|;)/.exec(a);if(Ad)return/Edge\\/([\\d\\.]+)/.exec(a);if(zd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Cd)return/WebKit\\/(\\S+)/.exec(a);if(yd)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:\"\");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement(\"CANVAS\");a&&(c.width=a);b&&(c.height=b);return c.getContext(\"2d\")}\r\nvar Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),c,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate(1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),\r\nc,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate3d(1px,1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}();\r\nfunction Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id[\"9.0\"])){for(var c=0,d=rd(String(Dd)).split(\".\"),e=rd(\"9.0\").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 p=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==\r\np[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id[\"9.0\"]=0<=c}c&&(a.style.transformOrigin=\"0 0\")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,\"matrix(\"+d.join(\",\")+\")\")}else a.style.left=Math.round(b[4])+\"px\",a.style.top=Math.round(b[5])+\"px\"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}\r\nfunction Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D=\"string\"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};\r\nUd.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,\"postrender\",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.B.appendChild(this.j);this.j.style.display=\"none\";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:\"ol-attribution\",c=void 0!==a.tipLabel?a.tipLabel:\"Attributions\",d=void 0!==a.collapseLabel?a.collapseLabel:\"\\u00bb\";\"string\"===typeof d?(this.h=document.createElement(\"span\"),this.h.textContent=d):this.h=\r\nd;d=void 0!==a.label?a.label:\"i\";\"string\"===typeof d?(this.s=document.createElement(\"span\"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement(\"button\");d.setAttribute(\"type\",\"button\");d.title=c;d.appendChild(e);R(d,\"click\",this.P,this);c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\"+(this.g&&this.v?\" ol-collapsed\":\"\")+(this.v?\"\":\" ol-uncollapsible\");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?\r\na.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);\r\nfunction Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+\r\n1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display=\"\",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display=\"none\",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement(\"LI\"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=\r\nd,this.a[A]=!0;for(A in b)d=document.createElement(\"LI\"),d.innerHTML=b[A].a,d.style.display=\"none\",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?\"\":\"none\",this.u=A);A&&sa(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,\"\"===\r\nb?c=F:(c=document.createElement(\"a\"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?\"none\":\"\"}else this.u&&(this.element.style.display=\"none\",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:\"ol-full-screen\";var b=void 0!==a.label?a.label:\"\\u2922\";this.g=\"string\"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:\"\\u00d7\";this.h=\"string\"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:\"Toggle full-screen\",b=document.createElement(\"button\");b.className=this.a+\"-\"+Yd();b.setAttribute(\"type\",\"button\");b.title=c;b.appendChild(this.g);R(b,\"click\",this.v,this);c=document.createElement(\"div\");\r\nc.className=this.a+\" ol-unselectable ol-control \"+(Zd()?\"\":\"ol-unsupported\");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);\r\nXd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?\"string\"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):\r\n$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+\"-true\",Rd(this.h,this.g)):(a.className=this.a+\"-false\",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};\r\nfunction Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}\r\nfunction $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a=\"webkitfullscreenchange\":b.mozRequestFullScreen?a=\"mozfullscreenchange\":b.msRequestFullscreen?a=\"MSFullscreenChange\":b.requestFullscreen&&(a=\"fullscreenchange\")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-rotate\",c=void 0!==a.label?a.label:\"\\u21e7\";this.a=null;\"string\"===typeof c?(this.a=document.createElement(\"span\"),this.a.className=\"ol-compass\",this.a.textContent=c):(this.a=c,this.a.classList.add(\"ol-compass\"));var d=a.tipLabel?a.tipLabel:\"Reset rotation\",c=document.createElement(\"button\");c.className=b+\"-reset\";c.setAttribute(\"type\",\"button\");c.title=d;c.appendChild(this.a);R(c,\"click\",be.prototype.s,this);d=document.createElement(\"div\");\r\nd.className=b+\" ol-unselectable ol-control\";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add(\"ol-hidden\")}B(be,Ud);\r\nbe.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};\r\nfunction ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b=\"rotate(\"+a+\"rad)\";if(this.c){var c=this.element.classList.contains(\"ol-hidden\");c||0!==a?c&&0!==a&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-zoom\",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:\"+\",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:\"\\u2212\",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:\"Zoom in\",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:\"Zoom out\",h=document.createElement(\"button\");h.className=b+\"-in\";h.setAttribute(\"type\",\"button\");h.title=f;h.appendChild(\"string\"===typeof d?document.createTextNode(d):d);R(h,\"click\",de.prototype.c.bind(this,\r\nc));d=document.createElement(\"button\");d.className=b+\"-out\";d.setAttribute(\"type\",\"button\");d.title=g;d.appendChild(\"string\"===typeof e?document.createTextNode(e):e);R(d,\"click\",de.prototype.c.bind(this,-c));c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);\r\nde.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;\r\nfunction ge(){var a=aa.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!xd(\"Presto\")&&(a=function(){var a=document.createElement(\"IFRAME\");a.style.display=\"none\";a.src=\"\";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write(\"\");a.close();var c=\"callImmediate\"+Math.random(),d=\"file:\"==b.location.protocol?\"*\":b.location.protocol+\"//\"+b.location.host,a=ea(function(a){if((\"*\"==d||a.origin==d)&&a.data==\r\nc)this.port1.onmessage()},this);b.addEventListener(\"message\",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if(\"undefined\"!==typeof a&&!xd(\"Trident\")&&!xd(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(a){var b=document.createElement(\"SCRIPT\");\r\nb.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",le=-1!==ke.indexOf(\"firefox\"),me=-1!==ke.indexOf(\"safari\")&&-1===ke.indexOf(\"chrom\"),ne=-1!==ke.indexOf(\"macintosh\"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!(\"HTMLCanvasElement\"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re=\"ontouchstart\"in K,se=\"PointerEvent\"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];\r\nif(\"WebGLRenderingContext\"in K)try{var we=ie(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType=\"mouse\";return b}n=ye.prototype;\r\nn.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};\r\nn.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}B(Je,xe);function Ke(a,b){var c=b;\"number\"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};\r\nn.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le(\"lostpointercapture\",a,a))};n.Vd=function(a){U(this.b,new Le(\"gotpointercapture\",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles=\"bubbles\"in a?a.bubbles:!1;this.cancelable=\"cancelable\"in a?a.cancelable:!1;this.view=\"view\"in a?a.view:null;this.detail=\"detail\"in a?a.detail:null;this.screenX=\"screenX\"in a?a.screenX:0;this.screenY=\"screenY\"in a?a.screenY:0;this.clientX=\"clientX\"in a?a.clientX:0;this.clientY=\"clientY\"in a?a.clientY:0;this.button=\"button\"in a?a.button:0;this.relatedTarget=\"relatedTarget\"in a?a.relatedTarget:\r\nnull;this.pointerId=\"pointerId\"in a?a.pointerId:0;this.width=\"width\"in a?a.width:0;this.height=\"height\"in a?a.height:0;this.pointerType=\"pointerType\"in a?a.pointerType:\"\";this.isPrimary=\"isPrimary\"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}\r\nvar Qe=!1;try{Qe=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};\r\nfunction Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType=\"touch\";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}\r\nfunction Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}\r\nn.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};\r\nn.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};\r\nn.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};\r\nfunction Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};\r\nfunction $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}\r\nfunction He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};\r\nvar Fe=\"pointermove\",Ee=\"pointerdown\",Ge=\"pointerup\",Ve=\"pointerover\",cf=\"pointerout\",We=\"pointerenter\",Xe=\"pointerleave\",De=\"pointercancel\",bf=[[\"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\",\r\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);\r\nfunction ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}\r\nfunction lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};\r\nn.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};\r\nn.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf=\"singleclick\",hf=\"click\",jf=\"dblclick\",qf=\"pointerdrag\",pf=\"pointermove\",of=\"pointerdown\",mf=\"pointerup\",nf=\"pointercancel\",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:\"pointerover\",Me:\"pointerout\",Je:\"pointerenter\",Ke:\"pointerleave\",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);\r\nfunction tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get(\"maxResolution\"),h=a.get(\"minResolution\");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get(\"extent\")};n.Xb=function(){return this.get(\"opacity\")};n.gb=function(){return this.get(\"visible\")};n.Yb=function(){return this.get(\"zIndex\")};n.Bc=function(a){this.set(\"opacity\",a)};n.Cc=function(a){this.set(\"visible\",a)};\r\nn.Dc=function(a){this.set(\"zIndex\",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:\"ready\";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if(\"string\"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]=\"string\"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};\r\nvf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La(\"source\"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get(\"source\")||null};n.Sb=function(){var a=this.da();return a?a.T():\"undefined\"};n.fe=function(){this.w()};\r\nn.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,\"change\",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,\"precompose\",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,\"change\",a.render,a),this.w())};n.$b=function(a){this.set(\"source\",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+\":\"+a+\":\"+(c?nd(c):\"null\");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+\":\"+a+\":\"+(c?nd(c):\"null\")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}\r\nfunction Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}\r\nfunction Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}\r\nn.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};\r\nn.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,\"change\",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}\r\nfunction Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=\"\"}B(Sf,Ga);function Tf(a){U(a,\"change\")}Sf.prototype.getKey=function(){return this.key+\"/\"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};\r\nfunction Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],\"change\",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,\"change\",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set(\"active\",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}\r\nfunction eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return\"INPUT\"!==a&&\"SELECT\"!==a&&\"TEXTAREA\"!==a}function mg(a){L(a.b,56);return\"mouse\"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}\r\nfunction og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}\r\nfunction tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();\r\nzc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}\r\nfunction yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement(\"div\");this.a.style.position=\"absolute\";this.a.className=\"ol-box \"+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+\"px\";a.top=Math.min(b[1],c[1])+\"px\";a.width=Math.abs(c[0]-b[0])+\"px\";a.height=Math.abs(c[1]-b[1])+\"px\"}\r\nzg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height=\"inherit\"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||\"ol-dragbox\");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}\r\nfunction Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxdrag\",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg(\"boxend\",a.coordinate,a)));return!1}\r\nfunction Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxstart\",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||\"ol-dragzoom\"})}B(Ig,Dg);\r\nIg.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);\r\nfunction Kg(a){var b=!1;if(\"keydown\"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if(\"keydown\"==a.type||\"keypress\"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);\r\nfunction Og(a){var b=!1;if(\"wheel\"==a.type||\"mousewheel\"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;\"wheel\"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):\"mousewheel\"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}\r\nNg.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);\r\nfunction Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}\r\nfunction Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}\r\nfunction Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La(\"layers\"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set(\"layers\",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};\r\nn.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get(\"layers\");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,\"propertychange\",this.rb,this),R(d,\"change\",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,\"propertychange\",this.rb,this),R(a,\"change\",this.rb,this)];this.w()};\r\nn.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get(\"layers\"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return\"ready\"};function Yg(a){Eb.call(this,{code:a,units:\"m\",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh=\"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(a){return new Yg(a)});\r\nfunction ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:\"degrees\",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};\r\nvar gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh(\"CRS:84\"),new fh(\"EPSG:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new fh(\"urn:ogc:def:crs:OGC:2:84\"),new fh(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new fh(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set(\"preload\",void 0!==a.preload?a.preload:0);this.set(\"useInterimTilesOnError\",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get(\"useInterimTilesOnError\")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));\r\nelse{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):\"-\",h=this.g?rh(this.g):\"-\";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=[\"c\"+f+h+(void 0!==this.a?this.a.toString():\"-\"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?\r\na.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;\r\nn.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};\r\nn.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():\"f\"+(a.b?nd(a.b):\"-\"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();\r\nfunction vh(a,b,c){c||(c=0);var d=Array(16);if(\"string\"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=\r\nc+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>\r\n20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|\r\ng>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|\r\ng>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|\r\ng>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^\r\nb^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;\r\nf=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+\r\n(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;\r\nc=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}\r\nfunction wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if(\"string\"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}\r\nfunction qh(a){if(void 0===a.l){var b=\"s\"+(a.a?nd(a.a):\"-\")+\",\"+(void 0!==a.f?a.f.toString():\"-\")+\",\"+(a.b?a.b.toString():\"-\")+\",\"+(void 0!==a.g?a.g:\"-\")+\",\"+(void 0!==a.h?a.h.toString():\"-\")+\",\"+(void 0!==a.c?a.c.toString():\"-\"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,\r\nd);else for(c=\"\",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){\"function\"===typeof b?a.c=b:\"string\"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}\r\nfunction Bh(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:\"rgba(255,255,255,0.4)\"}),b=new xh({color:\"#3399CC\",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}\r\nfunction Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,\r\na.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c=\"\";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);\r\nfunction Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}\r\nfunction Ih(a,b,c,d){var e=0;if(a.ca&&\"\"!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+\r\na.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;\r\nn.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}\"\"!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};\r\nn.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}\"\"!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};\r\nn.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}\"\"!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}\"\"!==this.c&&(a=tc(a),Ih(this,a,2,2))}};\r\nn.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}\"\"!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}\r\nfunction Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=\r\nb.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}\r\nn.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};\r\nn.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};\r\nn.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==a?a:\"middle\"};this.c=void 0!==\r\nh?h:\"\";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=\"\"};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&\"ready\"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}\r\nfunction Wh(a,b){var c=b.D;void 0!==c&&(\"string\"===typeof c?a.logos[c]=\"\":c&&(L(\"string\"==typeof c.href,44),L(\"string\"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}\r\nfunction Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}\r\nai.prototype.g=function(a,b,c){ci(this,\"precompose\",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,\"postcompose\",c,a,void 0)};\r\nfunction ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);\r\nfunction hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=\r\nk[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}\r\nfunction ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+\r\nq,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);\r\n1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split(\"\\n\");S=O.length;1<S?(X=Math.round(1.5*b.measureText(\"M\").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;\r\ncase 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);\r\nD=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}\r\nfunction li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);\r\nmi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};\r\nmi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};\r\nmi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);\r\nfunction oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nfunction pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}\r\nn.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};\r\nn.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};\r\nn.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:\"round\";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:\"round\";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};\r\nfunction qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);\r\nfunction ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;\r\nn.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};\r\nn.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};\r\nn.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};\r\nn.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nn.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:\"round\",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:\"round\",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};\r\nfunction si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j=\"\";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);\r\nfunction ui(a,b,c,d,e){if(\"\"!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=\r\nf.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=\r\n{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}\r\nti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:\"round\",e=e?e.slice():lh,f=void 0!==f?f:\"round\",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;\r\nvar k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:\"10px sans-serif\";h=void 0!==h?h:\"center\";l=void 0!==l?l:\"middle\";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:\"\";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=\"\"};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);\r\nfunction wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};\r\nvi.prototype.b=function(a,b){var c=void 0!==a?a.toString():\"0\",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};\r\nvi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};\r\nfunction xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}\r\nvar Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();\r\nif(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=\r\nb.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf(\"OPR\"),Gi=-1<Ei.navigator.userAgent.indexOf(\"Edge\");Di=!(!Ei.navigator.userAgent.match(\"CriOS\")&&null!==Ei.chrome&&void 0!==Ei.chrome&&\"Google Inc.\"===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}\r\nfunction Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-\r\nr[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=\r\ng[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=\r\n-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+\"/\"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,\r\na.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}\r\nfunction Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],\r\nw=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}\r\nfunction Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);\r\nMi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,\"precompose\",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,\"render\"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*\r\n(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+\r\nN),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],\r\nP[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,\"render\",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,\"postcompose\",c,a,d)};\r\nMi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=\r\nx:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get(\"preload\"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);\r\nOi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,\"precompose\",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,\"render\")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=\r\nb.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,\"render\",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,\"postcompose\",c,a,m)};\r\nOi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};\r\nOi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};\r\nfunction Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return\"canvas\"};\r\nRi.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,\"precompose\",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&\"ready\"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,\"postcompose\",a);this.a||(this.b.style.display=\r\n\"\",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement(\"DIV\");b.style.position=\"absolute\";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};\r\nUi.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display=\"none\",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=\r\nt.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,\r\nF),t.i),O=z.Z(t),S=O.style;S.maxWidth=\"none\";var X,P;0<G?(X=document.createElement(\"DIV\"),P=X.style,P.overflow=\"hidden\",P.width=F[0]+\"px\",P.height=F[1]+\"px\",S.position=\"absolute\",S.left=-G+\"px\",S.top=-G+\"px\",S.width=F[0]+2*G+\"px\",S.height=F[1]+2*G+\"px\",X.appendChild(O)):(S.width=F[0]+\"px\",S.height=F[1]+\"px\",X=O,P=S);P.position=\"absolute\";P.left=(Q-t.c[1])*F[0]+\"px\";P.top=(t.c[2]-N)*F[1]+\"px\";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),\r\nr.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&\r\n!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display=\"\",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get(\"preload\"));Uh(a,g);Wh(a,g);return!0};\r\nfunction Vi(a,b){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth=\"none\";b.style.position=\"absolute\";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};\r\nn.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,\"precompose\",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,\"render\",a,d));Xi(this,\"postcompose\",a,d)};\r\nfunction Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};\r\nn.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position=\"absolute\";c.style.width=\"100%\";c.style.height=\"100%\";c.className=\"ol-unselectable\";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement(\"DIV\");this.b.className=\"ol-unselectable\";c=this.b.style;c.position=\"absolute\";c.width=\"100%\";c.height=\"100%\";R(this.b,\"touchstart\",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};\r\nYi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return\"dom\"};\r\nYi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,\"precompose\")||Ha(b,\"postcompose\")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,\"precompose\",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&\"ready\"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||\r\n(this.b.style.display=\"\",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,\"postcompose\",a)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b=\"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;}\"}B(cj,aj);var dj=new cj;\r\nfunction ej(){this.b=\"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;}\"}B(ej,bj);var fj=new ej;\r\nfunction gj(a,b){this.i=a.getUniformLocation(b,\"j\");this.j=a.getUniformLocation(b,\"i\");this.h=a.getUniformLocation(b,\"k\");this.l=a.getUniformLocation(b,\"h\");this.b=a.getAttribLocation(b,\"e\");this.a=a.getAttribLocation(b,\"f\");this.f=a.getAttribLocation(b,\"c\");this.c=a.getAttribLocation(b,\"g\");this.g=a.getAttribLocation(b,\"d\")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf(\"OES_element_index_uint\"))&&b.getExtension(\"OES_element_index_uint\");R(this.C,\"webglcontextlost\",this.K,this);R(this.C,\"webglcontextrestored\",this.s,this)}B(jj,Aa);\r\nfunction kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}\r\njj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};\r\nfunction mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;\r\na.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+\"/\"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};\r\nfunction qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);\r\nfunction tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}\r\nfunction uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=\r\nH,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};\r\nfunction vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}\r\nfunction wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}\r\nsj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,\r\n1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-\r\n1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);\r\nreturn u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}\r\nsj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};\r\nfunction yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};\r\nyj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}\r\nyj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};\r\nfunction Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};\r\nFj.prototype.Ma=function(a){this.a=a};function Gj(){this.b=\"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;}\"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b=\"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;}\"}B(Ij,bj);var Jj=new Ij;\r\nfunction Kj(a,b){this.c=a.getUniformLocation(b,\"f\");this.f=a.getUniformLocation(b,\"e\");this.h=a.getUniformLocation(b,\"d\");this.g=a.getUniformLocation(b,\"g\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);\r\nfunction Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}\r\nLj.prototype.Jc=function(a,b,c){Nj(this,\"precompose\",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,\"postcompose\",\r\nc,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b=\"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;}\"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,\"e\");this.f=a.getUniformLocation(b,\"d\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([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.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};\r\nTj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];\r\nMj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==\r\nb.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,\r\nv),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get(\"preload\"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,\r\n-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};\r\nn.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};\r\nn.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get(\"renderOrder\");\r\nvoid 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};\r\nXj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement(\"CANVAS\");this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,\"webglcontextlost\",this.ge,this);R(this.b,\"webglcontextrestored\",this.he,this);this.a=new Xj;this.K=null;this.l=\r\nnew Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);\r\nfunction Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,\r\n6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}\r\nn.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return\"webgl\"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};\r\nfunction bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}\r\nn.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display=\"none\",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,\"precompose\",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&\"ready\"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=\r\ne,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display=\"\",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,\"postcompose\",a);Rf(this,a);a.postRenderFunctions.push(Pf)};\r\nn.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=[\"canvas\",\"webgl\",\"dom\"];\r\nfunction Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(re?\" ol-touch\":\"\");this.a.style.position=\r\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.s=document.createElement(\"DIV\");this.s.className=\"ol-overlaycontainer\";this.a.appendChild(this.s);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";a=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",of,\"mousewheel\",\"wheel\"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);\r\nthis.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,\"wheel\",this.Sa,this);R(this.a,\"mousewheel\",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La(\"layergroup\"),this.vd,this);R(this,La(\"view\"),this.Kd,this);R(this,La(\"size\"),this.Gd,this);R(this,La(\"target\"),this.Id,\r\nthis);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},\r\nthis)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get(\"layers\").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};\r\nn.R=function(){Da(this.ma);Da(this.N);ya(this.a,\"wheel\",this.Sa,this);ya(this.a,\"mousewheel\",this.Sa,this);void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set(\"target\",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};\r\nn.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get(\"target\")};n.Ra=function(){var a=this.Wb();return void 0!==a?\"string\"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};\r\nfunction fk(a){return a.get(\"layergroup\")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get(\"size\")};n.U=function(){return this.get(\"view\")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};\r\nn.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get(\"active\")&&!d.handleEvent(a))break}}};\r\nn.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};\r\nn.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,\"keydown\",this.Sa,this),R(a,\"keypress\",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener(\"resize\",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};\r\nn.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,\"propertychange\",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,\"propertychange\",this.render,this),R(a,\"change\",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get(\"layers\").remove(a)};\r\nn.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,\r\npostRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td(\"moveend\",this,h)),gb(h.extent,\r\nthis.va)));U(this,new Td(\"postrender\",this,h));d=g=this.Fd;this&&(d=ea(g,this));\"function\"!=ba()||aa.Window&&aa.Window.prototype&&!xd(\"Edge\")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};\r\nn.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set(\"size\",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set(\"size\",void 0)};\r\nfunction ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b=\"string\"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||\"boolean\"===typeof a.logo&&a.logo)d[\"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\"]=\r\n\"http://openlayers.org/\";else{var e=a.logo;\"string\"===typeof e?d[e]=\"\":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L(\"string\"==typeof e.href,44),L(\"string\"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:\"string\"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];\r\nif(\"canvas\"==k){if(qe){e=Ri;break}}else if(\"dom\"==k){e=Yi;break}else if(\"webgl\"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:\r\n1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:\r\n1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement(\"DIV\");this.c.className=\"ol-overlay-container\";this.c.style.position=\"absolute\";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:\"\",sb:\"\",wb:\"\",xb:\"\",visible:!0};this.f=null;R(this,La(\"element\"),this.td,this);R(this,La(\"map\"),\r\nthis.Ad,this);R(this,La(\"offset\"),this.Bd,this);R(this,La(\"position\"),this.Dd,this);R(this,La(\"positioning\"),this.Ed,this);void 0!==a.element&&this.set(\"element\",a.element);this.set(\"offset\",void 0!==a.offset?a.offset:[0,0]);this.set(\"positioning\",void 0!==a.positioning?a.positioning:\"top-left\");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get(\"element\"))&&this.c.appendChild(a)};\r\nn.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get(\"map\");a&&(this.f=R(a,\"postrender\",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};\r\nn.Dd=function(){hk(this);if(void 0!==this.get(\"position\")&&this.autoPan){var a=this.get(\"map\");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get(\"element\"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&\r\n(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set(\"map\",a)};n.Ac=function(a){this.set(\"position\",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}\r\nfunction jk(a,b){a.a.visible!==b&&(a.c.style.display=b?\"\":\"none\",a.a.visible=b)}\r\nfunction hk(a){var b=a.get(\"map\"),c=a.get(\"position\");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get(\"offset\"),f=a.get(\"positioning\"),g=e[0],e=e[1];if(\"bottom-right\"==f||\"center-right\"==f||\"top-right\"==f)\"\"!==a.a.sb&&(a.a.sb=b.left=\"\"),g=Math.round(d[0]-c[0]-g)+\"px\",a.a.wb!=g&&(a.a.wb=b.right=g);else{\"\"!==a.a.wb&&(a.a.wb=b.right=\"\");if(\"bottom-center\"==f||\"center-center\"==f||\"top-center\"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+\"px\";a.a.sb!=g&&(a.a.sb=b.left=g)}if(\"bottom-left\"==\r\nf||\"bottom-center\"==f||\"bottom-right\"==f)\"\"!==a.a.xb&&(a.a.xb=b.top=\"\"),c=Math.round(d[1]-c[1]-e)+\"px\",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{\"\"!==a.a.lb&&(a.a.lb=b.bottom=\"\");if(\"center-left\"==f||\"center-center\"==f||\"center-right\"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+\"px\";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};\r\nn.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,\"change\",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open(\"GET\",\"function\"===typeof a?a(d,e,f):a,!0);\"arraybuffer\"==b.$()&&(g.responseType=\"arraybuffer\");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;\"json\"==a||\"text\"==a?d=g.responseText:\"xml\"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,\"application/xml\"))):\"arraybuffer\"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}\r\nfunction qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}\r\nfunction tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return\"string\"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return\"json\"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?\r\n(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LineString\"};\r\nn.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}\r\nn.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,\"XY\",b);a.ua=c;a.w();return a};n.$=function(){return\"MultiLineString\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,\"XY\",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return\"MultiPoint\"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};\r\nfunction Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}\r\nfunction Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,\"XY\",b);d.a=c;d.w();return d};n.$=function(){return\"MultiPolygon\"};\r\nn.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,\"XY\",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b=\"XY\";!0===a.hasZ&&!0===a.hasM?b=\"XYZM\":!0===a.hasZ?b=\"XYZ\":!0===a.hasM&&(b=\"XYM\");return b}\r\nvar Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],\"XYZM\"):void 0!==a.z?new jc([a.x,a.y,a.z],\"XYZ\"):void 0!==a.m?new jc([a.x,a.y,a.m],\"XYM\"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};\r\nAk.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if(\"number\"===typeof c.x&&\"number\"===typeof c.y)d=\"Point\";else if(c.points)d=\"MultiPoint\";else if(c.paths)d=1===c.paths.length?\"LineString\":\"MultiLineString\";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||\r\ng.push([e.reverse()])}c=pa({},c);1===g.length?(d=\"Polygon\",c.rings=g[0]):(d=\"MultiPolygon\",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};\r\nAk.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb(\"EPSG:\"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],\"change\",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],\"change\",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};\r\nn.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return\"GeometryCollection\"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};\r\nn.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:\"EPSG:4326\");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}\r\nvar Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};\r\nGk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if(\"Feature\"==a.type)c=[this.b(a,b)];else if(\"FeatureCollection\"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};\r\nGk.prototype.c=function(a){a=a.crs;var b;a?\"name\"==a.type?b=Hb(a.properties.name):\"EPSG\"==a.type?b=Hb(\"EPSG:\"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement(\"CANVAS\"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,\"change\")};\r\nJk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext(\"2d\");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,\"change\")};\r\nJk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,\"error\",this.j,this,!0),R(this.b,\"load\",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:\"top-left\";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:\"fraction\";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:\"fraction\";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==\r\na.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:\"top-left\";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?\r\na.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if(\"fraction\"==this.l||\"fraction\"==this.i){if(!b)return null;a=this.g.slice();\"fraction\"==this.l&&(a[0]*=b[0]);\"fraction\"==this.i&&(a[1]*=b[1])}if(\"top-left\"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if(\"top-right\"==this.a||\"bottom-right\"==this.a)a[0]=-a[0]+b[0];if(\"bottom-left\"==this.a||\"bottom-right\"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};\r\nn.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if(\"top-left\"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if(\"top-right\"==this.c||\"bottom-right\"==this.c)a[0]=c[0]-b[0]-a[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};\r\nn.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,\"change\",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,\"change\",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return\"Circle\"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,\"XY\",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};\r\nn.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,\"error\",this.ce,this,!0),R(this.a,\"load\",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;\r\n(function(){var a={},b={Aa:a};(function(c){if(\"object\"===typeof a&&\"undefined\"!==typeof b)b.Aa=c();else{var d;\"undefined\"!==typeof window?d=window:\"undefined\"!==typeof global?d=global:\"undefined\"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q=\"function\"==typeof require&&require;if(!p&&q)return q(l,!0);if(k)return k(l,!0);q=Error(\"Cannot find module '\"+l+\"'\");throw q.code=\"MODULE_NOT_FOUND\",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=\r\na[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k=\"function\"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}\r\nfunction k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],\r\nh;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a(\"quickselect\");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,\r\nd=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),\r\nk=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},\r\nec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;\r\nq=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,\r\nf,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=\r\nf,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,\r\nd.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=[\"return a\",\" - b\",\";\"];this.Kb=new Function(\"a\",\"b\",b.join(a[0]));this.Lb=new Function(\"a\",\"b\",b.join(a[1]));this.la=new Function(\"a\",\"return {minX: a\"+a[0]+\", minY: a\"+a[1]+\", maxX: a\"+a[2]+\", maxY: a\"+a[3]+\"};\")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:\r\n1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}\r\nfunction Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:\"ready\",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,\r\nd;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl(\"addfeature\",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,\"change\",a.vc,a),R(c,\"propertychange\",a.vc,a)]}\r\nfunction $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl(\"addfeature\",h[d]))}\r\nfunction Zk(a,b){var c=!1;R(a,\"addfeature\",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,\"removefeature\",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}\r\nn.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl(\"clear\"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}\r\nn.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};\r\nn.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl(\"changefeature\",a))};\r\nfunction Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl(\"removefeature\",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);\r\nfunction el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if(\"Circle\"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],\r\ng=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,\r\nLa(\"active\"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}\r\nfunction hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}\r\nfunction pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}\r\nfunction tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}\r\nfunction ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl(\"drawstart\",a.g))}\r\nfunction nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}\r\nfunction sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));\"MultiPoint\"===a.P?lk(b,new yk([c])):\"MultiLineString\"===a.P?lk(b,new xk([c])):\"MultiPolygon\"===a.P&&lk(b,new zk([c]));U(a,new dl(\"drawend\",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;\r\nfunction ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get(\"active\");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;\"Point\"===a||\"MultiPoint\"===a?b=kl:\"LineString\"===a||\"MultiLineString\"===a?b=ll:\"Polygon\"===a||\"MultiPolygon\"===a?b=jl:\"Circle\"===a&&(b=rl);return b}var kl=\"Point\",ll=\"LineString\",jl=\"Polygon\",rl=\"Circle\";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||\r\n0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};\r\nwl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};\r\nwl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d=\"number\"===typeof c?c:c[0],c=\"number\"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};\r\nwl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,\"change\",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\\{z\\}/g,d=/\\{x\\}/g,e=/\\{y\\}/g,f=/\\{-y\\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}\r\nfunction Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=\"\"}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};\r\nfunction Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+\"/\"+b+\"/\"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};\r\nfunction Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;\r\nfunction Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join(\"\\n\");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}\r\nB(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl(\"tileloadstart\",a));break;case 2:U(this,new Fl(\"tileloadend\",a));break;case 3:U(this,new Fl(\"tileloaderror\",a))}};function Hl(a,b,c){a.tileUrlFunction=b;\"undefined\"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}\r\nGl.prototype.s=function(a){var b=[],c=/\\{(\\d)-(\\d)\\}/.exec(a)||/\\{([a-z])-([a-z])\\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}\r\nB(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};\r\nn.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,\"change\",a.v,a);return e}\r\nfunction $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}\r\nfunction Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:\"EPSG:3857\",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb(\"EPSG:3857\").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,\r\ntileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+\"=\"+encodeURIComponent(b[a]))});var d=c.join(\"&\");a=a.replace(/[?&]$/,\"\");a=-1===a.indexOf(\"?\")?a+\"?\":a+\"&\";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:\"anonymous\",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};\r\nQl.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(\":\").pop(),d.SIZE=f[0]+\",\"+f[1],d.BBOX=e.join(\",\"),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\"ImageServer/exportImage\"),\r\nb==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c=\"\",d=\"\",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d=\"round\"),c=this.a.f,void 0===c&&(c=\"round\"),e=this.a.h,void 0===\r\ne&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):\"-\",f=this.i?rh(this.i):\"-\",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=[\"r\"+e+f+(void 0!==\r\nthis.c?this.c.toString():\"-\")+(void 0!==this.g?this.g.toString():\"-\")+(void 0!==this.h?this.h.toString():\"-\")+(void 0!==this.b?this.b.toString():\"-\"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==\r\na.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;\r\nn.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};\r\nn.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y(\"ol.format.GeoJSON\",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y(\"ol.format.EsriJSON\",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y(\"ol.style.Style\",yh);y(\"ol.style.Circle\",ph);y(\"ol.style.RegularShape\",Rl);y(\"ol.style.Fill\",sh);y(\"ol.style.Stroke\",xh);y(\"ol.style.Icon\",Lk);\r\ny(\"ol.style.Text\",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:\"#333\"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y(\"ol.View\",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;\r\nuc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y(\"ol.control.defaults\",ee);y(\"ol.layer.Tile\",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;\r\nW.prototype.on=W.prototype.Y;y(\"ol.layer.Vector\",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y(\"ol.source.OSM\",Ol);Ol.prototype.refresh=Ol.prototype.Ja;\r\ny(\"ol.source.XYZ\",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y(\"ol.Map\",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;\r\nZ.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y(\"ol.source.Vector\",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;\r\nXk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y(\"ol.source.TileArcGISRest\",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y(\"ol.Overlay\",gk);gk.prototype.setPosition=gk.prototype.Ac;y(\"ol.Feature\",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y(\"ol.geom.Point\",jc);\r\njc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y(\"ol.geom.Polygon\",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y(\"ol.geom.LineString\",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y(\"ol.proj.Projection\",Eb);Eb.prototype.getCode=Eb.prototype.l;\r\ny(\"ol.interaction.Draw\",el);el.prototype.on=el.prototype.Y;y(\"ol.animation.pan\",Dc);y(\"ol.control.FullScreen\",Xd);\r\n  return OPENLAYERS.ol;\r\n}));\r\n\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/ol/ol-build.js\n ** module id = 6\n ** module chunks = 1 2 5\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\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMove.ts\n **/","import LayerBaseVector from \"../layers/LayerBaseVector\";\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\nimport {ol} from 'custom-ol'\r\nimport Timer = NodeJS.Timer;\r\nconst $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<Timer>;\r\n    _mapMoveCallbackTimeout: Array<Timer>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\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    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (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 lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\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 ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\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  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\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    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\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] = functionId;\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMoveCls.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\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 theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\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\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapInteractionBase.ts\n **/","import 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 true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\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 true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/checkDefined.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/makeGuid.ts\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\n\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopup.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport MapEvent = ol.MapEvent;\r\nconst $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction{\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback{\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent{\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\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    _popupOpen: boolean;\r\n    _passThroughLayerFeatureArray:  Array<FeatureLayerProperties>;\r\n    _currentPopupIndex: number;\r\n    _popupContentLength: number;\r\n    _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    _$popupCloser: JQuery;\r\n    _$popupContent: JQuery;\r\n    _$popupContainer: JQuery;\r\n    _popupOverlay: ol.Overlay;\r\n    _arrPopupLayers: Array<LayerBaseVector>;\r\n    _popupCoordinate: ol.Coordinate;\r\n    _popupChangedFunctions: Array<popupChangedFunction>;\r\n     _mapClickFunctions: Array<Function>;\r\n    _selectionLayerLookup: Object;\r\n     _arrPopupLayerIds: Array<string>;\r\n     _arrPopupLayerNames: Array<string>;\r\n    _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    _arrPopupContentFunction: Array<popupCallback>;\r\n    _selectionLayers: Array<ol.layer.Vector>;\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\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        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        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\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: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if(typeof target == 'string'){\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\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\r\n        this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter()\r\n            }});\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\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);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\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 as string;\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', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['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            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\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 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: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\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  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) =>{\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    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     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\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  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {\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\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: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\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     *\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?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\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: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopupCls.ts\n **/","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    _legendCheckbox: boolean;\r\n    _url: string;\r\n    _opacity: number;\r\n    _minZoom: number;\r\n    _maxZoom: number;\r\n    _visible: boolean;\r\n    _loaded: boolean;\r\n    _zIndex: number;\r\n    _legendContent: string;\r\n    _params: any;\r\n    id: string;\r\n    _name: string;\r\n    _source: ol.source.Source;\r\n    animate: boolean;\r\n    _legendCollapse: boolean;\r\n    _maxResolution: number;\r\n    _minResolution: number;\r\n    _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    _olLayer: ol.layer.Layer;\r\n    _applyCollapseCalled: boolean;\r\n\r\n\r\n\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: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\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        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\r\n        /**\r\n         *\r\n         * @protected\r\n         */\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        }\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(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\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    /**\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(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBase.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/zoomResolutionConvert.ts\n **/","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {\r\n        name: 'Camera',\r\n        itsType: 'cctv',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'WisDOT',\r\n            defaultIcon: 'cctv.png',\r\n            iconArray: [\r\n                ['City of Madison', 'Madison', 'cctv-mad.png']\r\n            ]\r\n        }\r\n    },\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: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\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\nexport class ItsLayerCollection {\r\n    _map: ol.Map;\r\n    _layers: Array<LayerItsInventory>;\r\n\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: ol.Map, exclude?: Array<string>) {\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     * 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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/ItsLayerCollection.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/colors.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nlet nm = provide('layers');\r\nconst $ = require('jquery');\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) : ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction|Function{\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(\r\n                {\r\n                    src: _iconUrlRoot + itsIcon,\r\n                    crossOrigin: 'anonymous'\r\n                }\r\n            )\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, resolution) {\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(\r\n                    {\r\n                        src: iconUrl,\r\n                        crossOrigin: 'anonymous'\r\n                    }\r\n                )\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.mapProj, this._projection4326);\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapProj, this._projection4326);\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerItsInventory.ts\n **/","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {MapMoveCls} from \"../olHelpers/mapMoveCls\";\r\nlet nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\nexport interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions{\r\n    transform?: CrsTransform;\r\n    mapMoveObj?: MapMoveCls;\r\n}\r\n\r\nexport interface CrsTransform{\r\n    dataProjection: ol.proj.Projection|string;\r\n    featureProjection: ol.proj.Projection|string;\r\n}\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorGeoJson extends LayerBaseVector {\r\n    _geoJsonFormat: ol.format.GeoJSON;\r\n    _transform: CrsTransform;\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?: LayerBaseVectorGeoJsonOptions) {\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 || {dataProjection: \"EPSG:4326\", 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: JSON) {\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 as Object));\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 as Object));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBaseVectorGeoJson.ts\n **/","import {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport MapMoveCls from '../olHelpers/mapMoveCls'\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst $ = require('jquery');\r\n\r\nlet g = new ol.Map({});\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface makeMapMoveParams {\r\n    /**\r\n     *\r\n     * @param lyr\r\n     * @param extent\r\n     * @param zoomLevel\r\n     */\r\n    (lyr: LayerBaseVector, extent: Array<number>, zoomLevel?: number): any\r\n}\r\n\r\n\r\nexport interface LayerBaseVectorOptions extends LayerBaseOptions{\r\n    autoLoad?: boolean;\r\n    style?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n    onDemand?: boolean;\r\n    onDemandDelay?: number;\r\n    mapMoveMakeGetParams?: makeMapMoveParams;\r\n    mapMoveObj?: MapMoveCls;\r\n}\r\n\r\nexport interface customStyleFunction{\r\n    (feature: ol.Feature, resolution?: number): Array<ol.style.Style>\r\n}\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nexport class LayerBaseVector extends LayerBase {\r\n    _olLayer: ol.layer.Vector;\r\n    _source: ol.source.Vector;\r\n    _style: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction|customStyleFunction;\r\n    _autoLoad: boolean;\r\n    _onDemand: boolean;\r\n    _onDemandDelay: number;\r\n    _mapMoveMakeGetParams: makeMapMoveParams;\r\n    _mapMoveParams: any;\r\n    _mapMove: MapMoveCls;\r\n    _projectionMap: ol.proj.Projection;\r\n    _projection4326: ol.proj.Projection;\r\n\r\n\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: string, options: LayerBaseVectorOptions = {}) {\r\n        super(url, options);\r\n\r\n        options = options as LayerBaseVectorOptions;\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\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () {return {};};\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        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        this._projectionMap = null;\r\n        this._projection4326 = new ol.proj.Projection({code: \"EPSG:4326\"});\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     */\r\n    get onDemandDelay(): number {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     */\r\n    get autoLoad(): boolean {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     */\r\n    get style(): ol.style.StyleFunction|Array<ol.style.Style>|ol.style.Style|customStyleFunction {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param style - the style or function\r\n     */\r\n    set style(style: ol.style.StyleFunction|Array<ol.style.Style>|ol.style.Style|customStyleFunction) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style as ol.style.Style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     */\r\n    get mapCrs(): string {\r\n        return this.mapProj == null ? null : this.mapProj.getCode();\r\n    }\r\n\r\n    get mapProj(): ol.proj.Projection{\r\n        if (this._projectionMap != null){\r\n            return this._projectionMap;\r\n        }\r\n\r\n        if (this._mapMove) {\r\n            this._projectionMap = this._mapMove.map.getView().getProjection();\r\n            return this._projectionMap;\r\n        } else {\r\n            return null;\r\n        }\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(): MapMoveCls {\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    get visible(): boolean{\r\n        return this._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.setVisible(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     */\r\n    get source(): ol.source.Vector {\r\n        return this.getSource() as ol.source.Vector;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     */\r\n    get features(): Array<ol.Feature> {\r\n        return this.source.getFeatures();\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    get olLayer(): ol.layer.Vector {\r\n        return super.getOlLayer() as ol.layer.Vector;\r\n    }\r\n\r\n    protected setZIndex(newZ: number) {\r\n        this.olLayer.setZIndex(newZ);\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBaseVector.ts\n **/","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\nimport {ol} from 'custom-ol';\r\nconst $ = require('jquery');\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: any;\r\n    addCheck: any;\r\n    layerParentLookup: any;\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    $divElement: any;\r\n    _legendItems: any;\r\n    layerGroup: any;\r\n    legendId: any;\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 {boolean} [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        //// 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\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    /**\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}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/LayerLegend.ts\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/my_little_test.js b/test-html/js/my_little_test.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f7fad39ec144f0c8dea18b5d589fc9194e964e3
--- /dev/null
+++ b/test-html/js/my_little_test.js
@@ -0,0 +1,10278 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var animate_buttons_1 = __webpack_require__(25);
+	//
+	//
+	console.log('eat this fish');
+	console.log('eat this fish');
+	console.log('eat this bird');
+	//
+	// let g = new ol3.source.Vector();
+	//
+	// console.log(olx);
+	console.log('i am here5');
+	function me(eat) {
+	    if (eat === void 0) { eat = 1; }
+	    console.log(eat, 'one');
+	}
+	me(1);
+	var control = new animate_buttons_1.MediaControl('map');
+	//
+	//
+	// console.log(ol3);
+	//
+	//
+	// console.log(definedAndNotNull("fish"));
+	// console.log(definedAndNotNull("fish"));
+	// console.log(definedAndNotNull("fish"));
+	// console.log(definedAndNotNull("fish"));
+	// console.log(definedAndNotNull("fish"));
+	// console.log('here');
+	//
+
+
+/***/ },
+
+/***/ 3:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+	 * 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 ( true ) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+			return jQuery;
+		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+	
+	
+	
+	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;
+	}));
+
+
+/***/ },
+
+/***/ 4:
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 12/10/2015.
+	 */
+	"use strict";
+	/**
+	 * 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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = provide;
+
+
+/***/ },
+
+/***/ 25:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 11/2/2015.
+	 */
+	var $ = __webpack_require__(3);
+	var provide_1 = __webpack_require__(4);
+	var range_change_1 = __webpack_require__(26);
+	var nm = provide_1.default('jQueryPlugin');
+	/**
+	 * @callback mediaCallback
+	 * @param {number} tm
+	 */
+	function timeToLocalDateString(tm) {
+	    "use strict";
+	    var d = new Date(tm);
+	    var p1 = d.toLocaleTimeString().split(' ');
+	    var p2 = p1[0].split(':');
+	    p2 = p2.slice(0, 2);
+	    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
+	}
+	var MediaControl = (function () {
+	    function MediaControl(element, min, max, val, step, func, playInterval, showAsDate) {
+	        var _this = this;
+	        if (min === void 0) { min = 0; }
+	        if (max === void 0) { max = 100; }
+	        if (val === void 0) { val = 0; }
+	        if (step === void 0) { step = 5; }
+	        if (func === void 0) { func = function () { }; }
+	        if (playInterval === void 0) { playInterval = 5; }
+	        if (showAsDate === void 0) { showAsDate = false; }
+	        if (typeof element == 'string') {
+	            this._container = $('#' + element);
+	        }
+	        else if (typeof element['style'] !== 'undefined') {
+	            this._container = $(element);
+	        }
+	        else {
+	            this._container = element;
+	        }
+	        this._container.addClass('media-control-container');
+	        this._playInterval = playInterval;
+	        this._interval = undefined;
+	        this._func = func;
+	        this._showAsDate = showAsDate;
+	        this._currentValue = undefined;
+	        this._min = undefined;
+	        this._max = undefined;
+	        this._step = undefined;
+	        this._playing = false;
+	        var htmlStr = '<span class="media-player-button media-back"></span>' +
+	            '<span class="media-player-button media-play"></span>' +
+	            '<span class="media-player-button media-pause media-disabled"></span>' +
+	            '<span class="media-player-button media-stop media-disabled" ></span>' +
+	            '<span class="media-player-button media-ahead"></span>' +
+	            "<input type=\"range\">" +
+	            "<div class=\"media-control-value-label-container\">" +
+	            "<span class=\"media-control-value-label-min\"></span>" +
+	            "<span class=\"media-control-value-label-val\"></span>" +
+	            "<span class=\"media-control-value-label-max\"></span>" +
+	            "</div>";
+	        this._container.append(htmlStr);
+	        // let btnPause = this._container.find('.media-pause');
+	        var btnPlay = this._container.find('.media-play');
+	        this._$btnStop = this._container.find('.media-stop');
+	        var btnAhead = this._container.find('.media-ahead');
+	        var btnBack = this._container.find('.media-back');
+	        this._$slider = this._container.find('input[type=range]');
+	        this._$valLabelMin = this._container.find('.media-control-value-label-min');
+	        this._$valLabelVal = this._container.find('.media-control-value-label-val');
+	        this._$valLabelMax = this._container.find('.media-control-value-label-max');
+	        this.setMinMaxValueStep(min, max, val, step);
+	        range_change_1.rangeChange(this._$slider, function (newVal) { _this.currentValue = newVal; }, 100);
+	        var ___this = this;
+	        btnPlay.click(function () {
+	            var $this = $(this);
+	            $this.addClass('media-disabled');
+	            ___this._$btnStop.removeClass('media-disabled');
+	            btnAhead.addClass('media-locked');
+	            btnBack.addClass('media-locked');
+	            ___this._$slider.prop('disabled', true);
+	            ___this._playing = true;
+	            ___this._interval = setInterval(function () {
+	                ___this.currentValue += ___this._step;
+	            }, ___this._playInterval);
+	        });
+	        this._$btnStop.click(function () {
+	            clearInterval(___this._interval);
+	            var $this = $(this);
+	            $this.addClass('media-disabled');
+	            btnPlay.removeClass('media-disabled');
+	            btnAhead.removeClass('media-locked');
+	            btnBack.removeClass('media-locked');
+	            ___this._$slider.prop('disabled', false);
+	            ___this._playing = false;
+	        });
+	        btnAhead.click(function () {
+	            ___this.currentValue = ___this.currentValue + ___this._step;
+	        });
+	        btnBack.click(function () {
+	            ___this.currentValue = ___this.currentValue - ___this._step;
+	        });
+	    }
+	    MediaControl.prototype.stopPlaying = function () {
+	        if (this._playing) {
+	            this._$btnStop.trigger('click');
+	        }
+	    };
+	    Object.defineProperty(MediaControl.prototype, "playing", {
+	        get: function () {
+	            return this._playing;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MediaControl.prototype, "min", {
+	        get: function () {
+	            return this._min;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MediaControl.prototype, "max", {
+	        get: function () {
+	            return this._max;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MediaControl.prototype, "step", {
+	        get: function () {
+	            return this._step;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MediaControl.prototype, "currentValue", {
+	        get: function () {
+	            return this._currentValue;
+	        },
+	        set: function (newValue) {
+	            if (newValue > this._max) {
+	                newValue = this._min;
+	            }
+	            else if (newValue < this._min) {
+	                newValue = this._max;
+	            }
+	            this._currentValue = newValue;
+	            this._$slider.val(this._currentValue.toFixed(2));
+	            if (this._showAsDate) {
+	                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+	            }
+	            else {
+	                this._$valLabelVal.html(this.currentValue.toString());
+	            }
+	            this._func(newValue);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * set min and max value with step
+	     * @param {number} newMin the new min
+	     * @param {number} newMax the new mas
+	     * @param {number} [newValue=newMin] the value to set
+	     * @param {number} [newStep=(newMax-newMin)/20] step value
+	     */
+	    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {
+	        this._min = newMin;
+	        this._max = newMax;
+	        newValue = typeof newValue == 'number' ? newValue : newMin;
+	        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;
+	        this._currentValue = newValue;
+	        this._step = newStep;
+	        this._$slider.prop('min', this.min.toString());
+	        this._$slider.prop('max', this.max.toString());
+	        this._$slider.prop('step', this.step.toString());
+	        this._$slider.val(this.currentValue.toString());
+	        if (this._showAsDate) {
+	            this._$valLabelMin.html(timeToLocalDateString(this._min));
+	            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+	            this._$valLabelMax.html(timeToLocalDateString(this._max));
+	        }
+	        else {
+	            this._$valLabelMin.html(this._min.toString());
+	            this._$valLabelVal.html(this.currentValue.toString());
+	            this._$valLabelMax.html(this._max.toString());
+	        }
+	    };
+	    Object.defineProperty(MediaControl.prototype, "changeFunction", {
+	        /**
+	         *
+	         * @param {mediaCallback} newFunc the callback on change
+	         */
+	        set: function (newFunc) {
+	            this._func = newFunc;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return MediaControl;
+	}());
+	exports.MediaControl = MediaControl;
+	nm.MediaControl = MediaControl;
+
+
+/***/ },
+
+/***/ 26:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var mouseIn = false;
+	var mouseDown = false;
+	var timeout = null;
+	var dragged = false;
+	var lastVal;
+	var $ = __webpack_require__(3);
+	/**
+	 * Created by gavorhes on 11/2/2015.
+	 */
+	function triggerCallback(callback, evt) {
+	    "use strict";
+	    var val = parseFloat(this.value);
+	    var min = parseFloat(this.min);
+	    var max = parseFloat(this.max);
+	    var step = parseFloat(this.step);
+	    if (max - val < step) {
+	        val = max;
+	    }
+	    var percent = (val - min) / (max - min);
+	    if (typeof lastVal == 'number' && val == lastVal) {
+	        return;
+	    }
+	    lastVal = val;
+	    callback(val, percent, evt);
+	}
+	/**
+	 * Add a variety of listeners for range inputs applied to a common callback
+	 * @param  $slider - jquery reference to the slider
+	 * @param {rangeChangeCallback} callback - the callback
+	 * @param {number} [changeTimeout=75] before the callback is called
+	 * @this {jQuery}
+	 * @returns {jQuery} the jQuery object
+	 */
+	function rangeChange($slider, callback, changeTimeout) {
+	    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;
+	    $slider.mouseenter(function () {
+	        mouseIn = true;
+	    });
+	    $slider.mouseleave(function () {
+	        mouseIn = false;
+	        mouseDown = false;
+	    });
+	    $slider.mousedown(function () {
+	        mouseDown = true;
+	    });
+	    $slider.mouseup(function () {
+	        mouseDown = false;
+	    });
+	    $slider.mousemove(
+	    /**
+	     *
+	     * @param {object} evt - event properties
+	     * @this {HTMLElement}
+	     */
+	    function (evt) {
+	        if (!(mouseIn && mouseDown)) {
+	            return;
+	        }
+	        dragged = true;
+	        if (lastVal == this['value']) {
+	            return;
+	        }
+	        lastVal = this['value'];
+	        if (timeout != null) {
+	            clearTimeout(timeout);
+	        }
+	        var _this = this;
+	        timeout = setTimeout(function () {
+	            triggerCallback.call(_this, callback, evt);
+	            timeout = null;
+	        }, changeTimeout);
+	    });
+	    $slider.keyup(
+	    /**
+	     *
+	     * @param {object} evt - event properties
+	     */
+	    function (evt) {
+	        if (evt.keyCode == 37 || evt.keyCode == 39) {
+	            triggerCallback.call(this, callback, evt);
+	        }
+	    });
+	    $slider.change(function (evt) {
+	        if (dragged) {
+	            dragged = false;
+	            return;
+	        }
+	        triggerCallback.call(this, callback, evt);
+	    });
+	    return this;
+	}
+	exports.rangeChange = rangeChange;
+
+
+/***/ }
+
+/******/ });
+//# sourceMappingURL=my_little_test.js.map
\ No newline at end of file
diff --git a/test-html/js/my_little_test.js.map b/test-html/js/my_little_test.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e19d2af46af42dc1768175807fb8d224d49e0a24
--- /dev/null
+++ b/test-html/js/my_little_test.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8**","webpack:///./src-ts/_test/my_little_test.ts","webpack:///./~/jquery/dist/jquery.js?89fd*","webpack:///./src-ts/util/provide.ts?c446*","webpack:///./src-ts/domUtil/animate-buttons.ts","webpack:///./src-ts/domUtil/range-change.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;ACrCA,6CAA2B,EAK3B,CAAC,CALsD;AACvD,GAAE;AACF,GAAE;AAGF,QAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,QAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,QAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,GAAE;AACF,oCAAmC;AACnC,GAAE;AACF,qBAAoB;AAGpB,QAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAI1B,aAAa,GAAe;KAAf,mBAAe,GAAf,OAAe;KACxB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,EAAC;AAED,GAAE,CAAC,CAAC,CAAC,CAAC;AAEN,KAAI,OAAO,GAAG,IAAI,8BAAY,CAAC,KAAK,CAAC,CAAC;AAEtC,GAAE;AACF,GAAE;AACF,qBAAoB;AACpB,GAAE;AACF,GAAE;AACF,2CAA0C;AAC1C,2CAA0C;AAC1C,2CAA0C;AAC1C,2CAA0C;AAC1C,2CAA0C;AAC1C,wBAAuB;AACvB,GAAE;;;;;;;;ACvCF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAE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","file":"my_little_test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","\r\nimport {MediaControl} from '../domUtil/animate-buttons'\r\n//\r\n//\r\n\r\n\r\nconsole.log('eat this fish');\r\nconsole.log('eat this fish');\r\nconsole.log('eat this bird');\r\n\r\n//\r\n// let g = new ol3.source.Vector();\r\n//\r\n// console.log(olx);\r\n\r\n\r\nconsole.log('i am here5');\r\n\r\n\r\n\r\nfunction me (eat: number = 1){\r\n    console.log(eat, 'one');\r\n}\r\n\r\nme(1);\r\n\r\nvar control = new MediaControl('map');\r\n\r\n//\r\n//\r\n// console.log(ol3);\r\n//\r\n//\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log('here');\r\n//\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/my_little_test.ts\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\r\n\r\nimport Timer = NodeJS.Timer;\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {rangeChange} from './range-change';\r\n\r\n\r\nlet nm = provide('jQueryPlugin');\r\n\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\n\r\nfunction timeToLocalDateString(tm) {\r\n    \"use strict\";\r\n    let d = new Date(tm);\r\n    let p1 = d.toLocaleTimeString().split(' ');\r\n    let p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\n\r\n\r\nexport class MediaControl {\r\n    _container: JQuery;\r\n    _min: number;\r\n    _max: number;\r\n    _playInterval: number;\r\n    _step: number;\r\n    _currentValue: number;\r\n\r\n    _playing: boolean;\r\n\r\n    _$btnStop: JQuery;\r\n    _$slider: JQuery;\r\n    _$valLabelVal: JQuery;\r\n    _$valLabelMin: JQuery;\r\n    _$valLabelMax: JQuery;\r\n    _interval: Timer;\r\n    _showAsDate: boolean;\r\n\r\n    _func: Function;\r\n\r\n    constructor(element: JQuery|HTMLElement|string, min = 0, max = 100, val= 0, step = 5, func: Function = ()=>{}, playInterval = 5, showAsDate= false) {\r\n\r\n        if (typeof  element == 'string'){\r\n            this._container = $('#' + element);\r\n        }\r\n        else if (typeof element['style'] !== 'undefined'){\r\n            this._container = $(element);\r\n        } else {\r\n            this._container = element as JQuery;\r\n        }\r\n\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = playInterval;\r\n        this._interval = undefined;\r\n        this._func = func;\r\n\r\n        this._showAsDate = showAsDate;\r\n\r\n        this._currentValue = undefined;\r\n        this._min = undefined;\r\n        this._max = undefined;\r\n        this._step = undefined;\r\n        this._playing = false;\r\n\r\n        let htmlStr =\r\n            '<span class=\"media-player-button media-back\"></span>' +\r\n            '<span class=\"media-player-button media-play\"></span>' +\r\n            '<span class=\"media-player-button media-pause media-disabled\"></span>' +\r\n            '<span class=\"media-player-button media-stop media-disabled\" ></span>' +\r\n            '<span class=\"media-player-button media-ahead\"></span>' +\r\n            `<input type=\"range\">` +\r\n            `<div class=\"media-control-value-label-container\">` +\r\n            `<span class=\"media-control-value-label-min\"></span>` +\r\n            `<span class=\"media-control-value-label-val\"></span>` +\r\n            `<span class=\"media-control-value-label-max\"></span>` +\r\n            `</div>`;\r\n\r\n        this._container.append(htmlStr);\r\n\r\n        // let btnPause = this._container.find('.media-pause');\r\n        let btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        let btnAhead = this._container.find('.media-ahead');\r\n        let btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\r\n\r\n        this._$valLabelMin = this._container.find('.media-control-value-label-min');\r\n        this._$valLabelVal = this._container.find('.media-control-value-label-val');\r\n        this._$valLabelMax = this._container.find('.media-control-value-label-max');\r\n\r\n        this.setMinMaxValueStep(min, max, val, step);\r\n\r\n        rangeChange(this._$slider,(newVal) => { this.currentValue = newVal;}, 100);\r\n\r\n        let ___this = this;\r\n\r\n        btnPlay.click(function () {\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            ___this._$btnStop.removeClass('media-disabled');\r\n            btnAhead.addClass('media-locked');\r\n            btnBack.addClass('media-locked');\r\n            ___this._$slider.prop('disabled', true);\r\n            ___this._playing = true;\r\n\r\n            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            btnPlay.removeClass('media-disabled');\r\n            btnAhead.removeClass('media-locked');\r\n            btnBack.removeClass('media-locked');\r\n            ___this._$slider.prop('disabled', false);\r\n            ___this._playing = false;\r\n        });\r\n\r\n        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n\r\n    stopPlaying(){\r\n        if (this._playing){\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    }\r\n\r\n    get playing(){\r\n        return this._playing;\r\n    }\r\n\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    get step() {\r\n        return this._step;\r\n    }\r\n\r\n    get currentValue() {\r\n        return this._currentValue;\r\n    }\r\n\r\n    set currentValue(newValue) {\r\n        if (newValue > this._max) {\r\n            newValue = this._min;\r\n        } else if (newValue < this._min) {\r\n            newValue = this._max;\r\n        }\r\n        this._currentValue = newValue;\r\n        this._$slider.val(this._currentValue.toFixed(2));\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n        } else {\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n        }\r\n\r\n        this._func(newValue);\r\n    }\r\n\r\n    /**\r\n     * set min and max value with step\r\n     * @param {number} newMin the new min\r\n     * @param {number} newMax the new mas\r\n     * @param {number} [newValue=newMin] the value to set\r\n     * @param {number} [newStep=(newMax-newMin)/20] step value\r\n     */\r\n    setMinMaxValueStep(newMin, newMax, newValue, newStep) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;\r\n\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\r\n\r\n        this._$slider.prop('min', this.min.toString());\r\n        this._$slider.prop('max', this.max.toString());\r\n        this._$slider.prop('step', this.step.toString());\r\n        this._$slider.val(this.currentValue.toString());\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelMin.html(timeToLocalDateString(this._min));\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            this._$valLabelMax.html(timeToLocalDateString(this._max));\r\n        } else {\r\n            this._$valLabelMin.html(this._min.toString());\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n            this._$valLabelMax.html(this._max.toString());\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {mediaCallback} newFunc the callback on change\r\n     */\r\n    set changeFunction(newFunc) {\r\n        this._func = newFunc;\r\n    }\r\n}\r\n\r\nnm.MediaControl = MediaControl;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/domUtil/animate-buttons.ts\n **/","\r\n\r\nlet mouseIn = false;\r\nlet mouseDown = false;\r\nlet timeout = null;\r\nlet dragged = false;\r\nlet lastVal;\r\nconst $ = require('jquery');\r\n\r\n\r\n/**\r\n * callback on range change interaction, context of this is the firing dom element\r\n * @callback rangeChangeCallback\r\n * @param {number} newValue\r\n * @param {number} ratio value from 0 to 1 relative of the value to the min and max\r\n * @param {object} evt\r\n */\r\n\r\n/***\r\n * callback funcion after the slider has been moved\r\n */\r\nexport interface rangeChangedCallback{\r\n    /**\r\n     *\r\n     * @param newValue new value of the slider\r\n     * @param ratio ratio from low to high, 0 to 1\r\n     * @param evt the original event\r\n     */\r\n    (newValue: number, ratio: number, evt: Event): any\r\n}\r\n\r\n\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nfunction triggerCallback(callback: rangeChangedCallback, evt) {\r\n    \"use strict\";\r\n\r\n    let val = parseFloat(this.value);\r\n    let min = parseFloat(this.min);\r\n    let max = parseFloat(this.max);\r\n    let step = parseFloat(this.step);\r\n\r\n    if (max - val < step){\r\n        val = max;\r\n    }\r\n\r\n    let percent =  (val - min) / (max - min);\r\n\r\n    if (typeof lastVal == 'number' && val ==  lastVal){\r\n        return;\r\n    }\r\n    lastVal = val;\r\n    callback(val, percent, evt);\r\n}\r\n\r\n\r\n\r\n/**\r\n * Add a variety of listeners for range inputs applied to a common callback\r\n * @param  $slider - jquery reference to the slider\r\n * @param {rangeChangeCallback} callback - the callback\r\n * @param {number} [changeTimeout=75] before the callback is called\r\n * @this {jQuery}\r\n * @returns {jQuery} the jQuery object\r\n */\r\nexport function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {\r\n\r\n    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;\r\n\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousemove(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         * @this {HTMLElement}\r\n         */\r\n        function (evt) {\r\n        if (!(mouseIn && mouseDown)) {\r\n            return;\r\n        }\r\n\r\n        dragged = true;\r\n\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n\r\n        }, changeTimeout);\r\n    });\r\n\r\n    $slider.keyup(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         */\r\n        function (evt) {\r\n        if (evt.keyCode == 37 || evt.keyCode == 39) {\r\n            triggerCallback.call(this, callback, evt);\r\n        }\r\n    });\r\n\r\n    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n\r\n    return this;\r\n}\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/domUtil/range-change.ts\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/reacttst.js b/test-html/js/reacttst.js
new file mode 100644
index 0000000000000000000000000000000000000000..2870ce292a846ab3884439364f9b9f00cf20aa6c
--- /dev/null
+++ b/test-html/js/reacttst.js
@@ -0,0 +1,66 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 9/22/2016.
+	 */
+	// import * as React from "react";
+	// import * as ReactDOM from "react/lib/";
+	//
+	// import { Hello } from "../_scratch/Hello";
+	//
+	// console.log('I am in a tsx file for some reason');
+	//
+	// ReactDOM.render(
+	//     <Hello compiler="TypeScript" framework="React" />,
+	//     document.getElementById("example")
+	// );
+	//
+
+
+/***/ }
+/******/ ]);
+//# sourceMappingURL=reacttst.js.map
\ No newline at end of file
diff --git a/test-html/js/reacttst.js.map b/test-html/js/reacttst.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c7e19f3a4611140438a50d3e3a7c0bf4913aa778
--- /dev/null
+++ b/test-html/js/reacttst.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8***","webpack:///./src-ts/_test/reacttst.tsx"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;IAEG;AAEH,mCAAkC;AAClC,2CAA0C;AAC1C,GAAE;AACF,8CAA6C;AAC7C,GAAE;AACF,sDAAqD;AACrD,GAAE;AACF,oBAAmB;AACnB,0DAAyD;AACzD,0CAAyC;AACzC,MAAK;AACL,GAAE","file":"reacttst.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\n// import * as React from \"react\";\r\n// import * as ReactDOM from \"react/lib/\";\r\n//\r\n// import { Hello } from \"../_scratch/Hello\";\r\n//\r\n// console.log('I am in a tsx file for some reason');\r\n//\r\n// ReactDOM.render(\r\n//     <Hello compiler=\"TypeScript\" framework=\"React\" />,\r\n//     document.getElementById(\"example\")\r\n// );\r\n//\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/reacttst.tsx\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/simple_map.js b/test-html/js/simple_map.js
new file mode 100644
index 0000000000000000000000000000000000000000..6186a1b68819b6a7f1fb6537bc24a1a0080d6a20
--- /dev/null
+++ b/test-html/js/simple_map.js
@@ -0,0 +1,12656 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 9/23/2016.
+	 */
+	var quickMap_1 = __webpack_require__(1);
+	var LayerEsriMapServer_1 = __webpack_require__(15);
+	var LayerLegend_1 = __webpack_require__(24);
+	var map = quickMap_1.quickMap();
+	var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');
+	var sixYearPlan = new LayerEsriMapServer_1.LayerEsriMapServer('http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', { name: 'Six Year Plan', legendCollapse: true });
+	map.addLayer(wisDotRegions.olLayer);
+	map.addLayer(sixYearPlan.olLayer);
+	var layerArray = [
+	    wisDotRegions,
+	    sixYearPlan
+	];
+	var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/15/2015.
+	 */
+	"use strict";
+	var quickMapBase_1 = __webpack_require__(2);
+	var provide_1 = __webpack_require__(4);
+	var mapMove_1 = __webpack_require__(7);
+	var mapPopup_1 = __webpack_require__(12);
+	var nm = provide_1.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 the ol map
+	 */
+	function quickMap(options) {
+	    var m = quickMapBase_1.quickMapBase(options);
+	    mapMove_1.default.init(m);
+	    mapPopup_1.default.init(m);
+	    return m;
+	}
+	exports.quickMap = quickMap;
+	nm.quickMap = quickMap;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = quickMap;
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/15/2015.
+	 */
+	"use strict";
+	var $ = __webpack_require__(3);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * Sets up a map with some default parameters and initializes
+	 * mapMove and mapPopup
+	 *
+	 * @param [options={}] config options
+	 * @param [options.divId=map] map div id
+	 * @param [options.center={}] center config object
+	 * @param [options.center.x=-10018378] center x, web mercator x or lon
+	 * @param [options.center.y=5574910] center y, web mercator y or lat
+	 * @param [options.zoom=7] zoom level
+	 * @param [options.minZoom=undefined] min zoom
+	 * @param [options.maxZoom=undefined] max zoom
+	 * @param [options.baseSwitcher=true] if add base map switcher
+	 * @param [options.fullScreen=false] if add base map switcher
+	 * @returns the ol map
+	 */
+	function quickMapBase(options) {
+	    options = options || {};
+	    options.divId = options.divId || 'map';
+	    options.center = options.center || { x: -10018378, 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 = $('#' + options.divId);
+	    $mapDiv.css('position', 'relative');
+	    var osmLayer = new custom_ol_1.ol.layer.Tile({ source: new custom_ol_1.ol.source.OSM() });
+	    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.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) {
+	    }
+	    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 custom_ol_1.ol.geom.Point([options.center.x, options.center.y]);
+	        new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" });
+	        p.transform(new custom_ol_1.ol.proj.Projection({ code: "EPSG:4326" }), new custom_ol_1.ol.proj.Projection({ code: "EPSG:3857" }));
+	        var coordinates = p.getCoordinates();
+	        options.center.x = coordinates[0];
+	        options.center.y = coordinates[1];
+	    }
+	    var map = new custom_ol_1.ol.Map({
+	        layers: [osmLayer],
+	        target: options.divId,
+	        controls: custom_ol_1.ol.control.defaults({
+	            attributionOptions: { collapsible: false }
+	        }),
+	        view: new custom_ol_1.ol.View({
+	            center: [options.center.x, options.center.y],
+	            zoom: options.zoom,
+	            minZoom: options.minZoom,
+	            maxZoom: options.maxZoom
+	        })
+	    });
+	    if (options.fullScreen) {
+	        //TODO add full screen options to ts
+	        map.addControl(new custom_ol_1.ol.control.FullScreen({}));
+	    }
+	    return map;
+	}
+	exports.quickMapBase = quickMapBase;
+	nm.quickMapBase = quickMapBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = quickMapBase;
+
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+	 * 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 ( true ) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+			return jQuery;
+		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+	
+	
+	
+	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;
+	}));
+
+
+/***/ },
+/* 4 */
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 12/10/2015.
+	 */
+	"use strict";
+	/**
+	 * 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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = provide;
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	exports.ol = __webpack_require__(6);
+	// // export default require('../ol/ol-build');
+	//
+	// const fish = 10;
+	// export = fish;
+	//
+	//
+	// export function cat(bird: string){
+	//     console.log('eat the fish')
+	// }
+	//
+	// export function nice(eat: number){
+	//     console.log('eat that fish');
+	// }
+	//
+	// export class Big{
+	//     glenn: string;
+	//
+	//     constructor(isGlenn){
+	//         this.glenn  = isGlenn;
+	//     }
+	//
+	//     set isGlenn(f: string){
+	//         console.log(this.glenn)
+	//     }
+	//
+	//     run(){
+	//         console.log(this.glenn + " can run");
+	//     }
+	// }
+	//
+	// export namespace HereIt{
+	//
+	//     export class Big2 {
+	//         glenn: string;
+	//
+	//         constructor(isGlenn) {
+	//             this.glenn = isGlenn;
+	//         }
+	//
+	//         set isGlenn(f: string) {
+	//             console.log(this.glenn)
+	//         }
+	//
+	//         run() {
+	//             console.log(this.glenn + " can run");
+	//         }
+	//     }
+	//
+	//
+	// } 
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var require;var require;/* WEBPACK VAR INJECTION */(function(global) {// OpenLayers 3. See http://openlayers.org/
+	// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
+	;(function (root, factory) {
+	  if (true) {
+	    module.exports = factory();
+	  } else if (typeof define === "function" && define.amd) {
+	    define([], factory);
+	  } else {
+	    root.ol = factory();
+	  }
+	}(this, function () {
+	  var OPENLAYERS = {};
+	  var n,aa=this;
+	function ba(){var a=aa.setImmediate,b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
+	else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}
+	function ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if("undefined"!==typeof window)var K=window;else"undefined"!==typeof global?K=global:"undefined"!==typeof self&&(K=self);function ha(a){this.message="Assertion failed. See /doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}
+	function xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}
+	function M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c="string"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};
+	function Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,"change")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]="change:"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja("propertychange",a,c))))};
+	V.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}
+	function Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}
+	function jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}
+	function nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}
+	function ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}
+	function qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){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 Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}
+	Ab.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db["us-ft"]=1200/3937;
+	function Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);
+	else{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if("degrees"==this.a)return a;var c=Mb(this,Hb("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};
+	Eb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?"string"===typeof a?Hb(a):a:Hb("EPSG:3857")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}
+	function Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if("string"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}
+	function Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c="XY";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};
+	n.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c="XY";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};
+	n.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};
+	n.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=
+	a[b+m*d],f[g++]=a[b+m*d+1]);return g}
+	function hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=
+	z,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LinearRing"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return"Point"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,"XY",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}
+	function oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}
+	function sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,"XY",b,c);return a};n.$=function(){return"Polygon"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,"XY",null,this.ja)};
+	function rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;
+	void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:"number"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,
+	a.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};
+	function yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};
+	n.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,"XY",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),
+	l=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};
+	n.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc="center",wc="resolution",xc="rotation";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}
+	function Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}
+	function Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:
+	this.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};
+	Mc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}
+	function Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}
+	function Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get("length");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get("length")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};
+	function fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set("length",a.a.length)}var hd="add",id="remove";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ld=/^(?: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,md=/^([a-z]*)$/i;function nd(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a}
+	var pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,
+	d=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=""}function xd(a){return-1!=ud.indexOf(a)};var yd=xd("Opera"),zd=xd("Trident")||xd("MSIE"),Ad=xd("Edge"),Bd=xd("Gecko")&&!(-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"))&&!(xd("Trident")||xd("MSIE"))&&!xd("Edge"),Cd=-1!=ud.toLowerCase().indexOf("webkit")&&!xd("Edge"),Dd;
+	a:{var Ed="",Fd=function(){var a=ud;if(Bd)return/rv\:([^\);]+)(\)|;)/.exec(a);if(Ad)return/Edge\/([\d\.]+)/.exec(a);if(zd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Cd)return/WebKit\/(\S+)/.exec(a);if(yd)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:"");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")}
+	var Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate(1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement("P"),
+	c,d={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]="translate3d(1px,1px,1px)",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&"none"!==c}return a}}();
+	function Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id["9.0"])){for(var c=0,d=rd(String(Dd)).split("."),e=rd("9.0").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 p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==
+	p[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id["9.0"]=0<=c}c&&(a.style.transformOrigin="0 0")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,"matrix3d("+e.join(",")+")")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,"matrix("+d.join(",")+")")}else a.style.left=Math.round(b[4])+"px",a.style.top=Math.round(b[5])+"px"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}
+	function Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D="string"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};
+	Ud.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,"postrender",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement("UL");this.j=document.createElement("LI");this.B.appendChild(this.j);this.j.style.display="none";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.h=document.createElement("span"),this.h.textContent=d):this.h=
+	d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.s=document.createElement("span"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);R(d,"click",this.P,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.g&&this.v?" ol-collapsed":"")+(this.v?"":" ol-uncollapsible");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?
+	a.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);
+	function Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+
+	1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display="",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display="none",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement("LI"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=
+	d,this.a[A]=!0;for(A in b)d=document.createElement("LI"),d.innerHTML=b[A].a,d.style.display="none",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?"":"none",this.u=A);A&&sa(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,""===
+	b?c=F:(c=document.createElement("a"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?"none":""}else this.u&&(this.element.style.display="none",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.g="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.h="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.a+"-"+Yd();b.setAttribute("type","button");b.title=c;b.appendChild(this.g);R(b,"click",this.v,this);c=document.createElement("div");
+	c.className=this.a+" ol-unselectable ol-control "+(Zd()?"":"ol-unsupported");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);
+	Xd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?"string"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):
+	$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+"-true",Rd(this.h,this.g)):(a.className=this.a+"-false",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};
+	function Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}
+	function $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.a=null;"string"===typeof c?(this.a=document.createElement("span"),this.a.className="ol-compass",this.a.textContent=c):(this.a=c,this.a.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.a);R(c,"click",be.prototype.s,this);d=document.createElement("div");
+	d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add("ol-hidden")}B(be,Ud);
+	be.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};
+	function ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b="rotate("+a+"rad)";if(this.c){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);R(h,"click",de.prototype.c.bind(this,
+	c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);R(d,"click",de.prototype.c.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);
+	de.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;
+	function ge(){var a=aa.MessageChannel;"undefined"===typeof a&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!xd("Presto")&&(a=function(){var a=document.createElement("IFRAME");a.style.display="none";a.src="";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write("");a.close();var c="callImmediate"+Math.random(),d="file:"==b.location.protocol?"*":b.location.protocol+"//"+b.location.host,a=ea(function(a){if(("*"==d||a.origin==d)&&a.data==
+	c)this.port1.onmessage()},this);b.addEventListener("message",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if("undefined"!==typeof a&&!xd("Trident")&&!xd("MSIE")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(a){var b=document.createElement("SCRIPT");
+	b.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",le=-1!==ke.indexOf("firefox"),me=-1!==ke.indexOf("safari")&&-1===ke.indexOf("chrom"),ne=-1!==ke.indexOf("macintosh"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!("HTMLCanvasElement"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re="ontouchstart"in K,se="PointerEvent"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];
+	if("WebGLRenderingContext"in K)try{var we=ie(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}n=ye.prototype;
+	n.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};
+	n.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=["","unavailable","touch","pen","mouse"]}B(Je,xe);function Ke(a,b){var c=b;"number"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};
+	n.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le("lostpointercapture",a,a))};n.Vd=function(a){U(this.b,new Le("gotpointercapture",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget:
+	null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}
+	var Qe=!1;try{Qe=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};
+	function Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}
+	function Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}
+	n.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};
+	n.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};
+	n.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};
+	function Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};
+	function $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}
+	function He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};
+	var Fe="pointermove",Ee="pointerdown",Ge="pointerup",Ve="pointerover",cf="pointerout",We="pointerenter",Xe="pointerleave",De="pointercancel",bf=[["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 df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);
+	function ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}
+	function lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};
+	n.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};
+	n.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf="singleclick",hf="click",jf="dblclick",qf="pointerdrag",pf="pointermove",of="pointerdown",mf="pointerup",nf="pointercancel",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:"pointerover",Me:"pointerout",Je:"pointerenter",Ke:"pointerleave",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);
+	function tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get("maxResolution"),h=a.get("minResolution");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get("extent")};n.Xb=function(){return this.get("opacity")};n.gb=function(){return this.get("visible")};n.Yb=function(){return this.get("zIndex")};n.Bc=function(a){this.set("opacity",a)};n.Cc=function(a){this.set("visible",a)};
+	n.Dc=function(a){this.set("zIndex",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:"ready";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if("string"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};
+	vf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La("source"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get("source")||null};n.Sb=function(){var a=this.da();return a?a.T():"undefined"};n.fe=function(){this.w()};
+	n.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,"change",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,"precompose",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,"change",a.render,a),this.w())};n.$b=function(a){this.set("source",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?nd(c):"null");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?nd(c):"null")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}
+	function Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}
+	function Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}
+	n.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};
+	n.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,"change",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}
+	function Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=""}B(Sf,Ga);function Tf(a){U(a,"change")}Sf.prototype.getKey=function(){return this.key+"/"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};
+	function Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],"change",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,"change",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set("active",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}
+	function eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function mg(a){L(a.b,56);return"mouse"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}
+	function og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}
+	function tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();
+	zc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}
+	function yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"}
+	zg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||"ol-dragbox");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}
+	function Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxdrag",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg("boxend",a.coordinate,a)));return!1}
+	function Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg("boxstart",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}B(Ig,Dg);
+	Ig.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);
+	function Kg(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);
+	function Og(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}
+	Ng.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);
+	function Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}
+	function Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}
+	function Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La("layers"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set("layers",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};
+	n.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get("layers");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,"propertychange",this.rb,this),R(d,"change",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,"propertychange",this.rb,this),R(a,"change",this.rb,this)];this.w()};
+	n.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get("layers"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return"ready"};function Yg(a){Eb.call(this,{code:a,units:"m",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh="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(a){return new Yg(a)});
+	function ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:"degrees",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};
+	var gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh("CRS:84"),new fh("EPSG:4326","neu"),new fh("urn:ogc:def:crs:EPSG::4326","neu"),new fh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new fh("urn:ogc:def:crs:OGC:1.3:CRS84"),new fh("urn:ogc:def:crs:OGC:2:84"),new fh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new fh("urn:x-ogc:def:crs:EPSG:4326","neu")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set("preload",void 0!==a.preload?a.preload:0);this.set("useInterimTilesOnError",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get("useInterimTilesOnError")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));
+	else{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):"-",h=this.g?rh(this.g):"-";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=["c"+f+h+(void 0!==this.a?this.a.toString():"-"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?
+	a.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;
+	n.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};
+	n.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():"f"+(a.b?nd(a.b):"-"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();
+	function vh(a,b,c){c||(c=0);var d=Array(16);if("string"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=
+	c+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>
+	20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|
+	g>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|
+	g>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|
+	g>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^
+	b^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;
+	f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+
+	(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;
+	c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}
+	function wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if("string"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}
+	function qh(a){if(void 0===a.l){var b="s"+(a.a?nd(a.a):"-")+","+(void 0!==a.f?a.f.toString():"-")+","+(a.b?a.b.toString():"-")+","+(void 0!==a.g?a.g:"-")+","+(void 0!==a.h?a.h.toString():"-")+","+(void 0!==a.c?a.c.toString():"-"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,
+	d);else for(c="",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){"function"===typeof b?a.c=b:"string"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}
+	function Bh(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:"rgba(255,255,255,0.4)"}),b=new xh({color:"#3399CC",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}
+	function Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,
+	a.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c="";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);
+	function Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}
+	function Ih(a,b,c,d){var e=0;if(a.ca&&""!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+
+	a.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;
+	n.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};
+	n.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);""!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}""!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};
+	n.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}""!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}""!==this.c&&(a=tc(a),Ih(this,a,2,2))}};
+	n.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}""!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}
+	function Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=
+	b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}
+	n.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};
+	n.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};
+	n.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:"round",lineDash:e?e:lh,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==a?a:"middle"};this.c=void 0!==
+	h?h:"";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=""};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&"ready"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}
+	function Wh(a,b){var c=b.D;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(L("string"==typeof c.href,44),L("string"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}
+	function Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}
+	ai.prototype.g=function(a,b,c){ci(this,"precompose",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,"postcompose",c,a,void 0)};
+	function ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=["Polygon","LineString","Image","Text"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);
+	function hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=
+	k[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}
+	function ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+
+	q,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);
+	1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split("\n");S=O.length;1<S?(X=Math.round(1.5*b.measureText("M").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;
+	case 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);
+	D=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}
+	function li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);
+	mi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};
+	mi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};
+	mi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);
+	function oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};
+	function pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}
+	n.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};
+	n.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};
+	n.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:"round";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:"round";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};
+	function qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);
+	function ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;
+	n.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};
+	n.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};
+	n.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};
+	n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};
+	n.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:"round",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:"round",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};
+	function si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j="";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);
+	function ui(a,b,c,d,e){if(""!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=
+	f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=
+	{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}
+	ti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:"round",e=e?e.slice():lh,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;
+	var k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:"10px sans-serif";h=void 0!==h?h:"center";l=void 0!==l?l:"middle";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:"";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);
+	function wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};
+	vi.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};
+	vi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};
+	function xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}
+	var Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();
+	if(e){if(2!=e.ib())return;var f=a.b(c.b,"Image");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,"LineString");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,"Polygon");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=
+	b.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,"Polygon");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,"Text"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf("OPR"),Gi=-1<Ei.navigator.userAgent.indexOf("Edge");Di=!(!Ei.navigator.userAgent.match("CriOS")&&null!==Ei.chrome&&void 0!==Ei.chrome&&"Google Inc."===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}
+	function Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-
+	r[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=
+	g[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=
+	-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,
+	a.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}
+	function Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],
+	w=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}
+	function Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);
+	Mi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,"precompose",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,"render"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*
+	(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+
+	N),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],
+	P[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,"render",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,"postcompose",c,a,d)};
+	Mi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=
+	x:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get("preload"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);
+	Oi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,"precompose",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,"render")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=
+	b.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,"render",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,"postcompose",c,a,m)};
+	Oi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};
+	Oi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get("renderOrder");
+	void 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};
+	function Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return"canvas"};
+	Ri.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,"precompose",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&"ready"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,"postcompose",a);this.a||(this.b.style.display=
+	"",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display="none",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement("DIV");b.style.position="absolute";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};
+	Ui.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display="none",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=
+	t.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,
+	F),t.i),O=z.Z(t),S=O.style;S.maxWidth="none";var X,P;0<G?(X=document.createElement("DIV"),P=X.style,P.overflow="hidden",P.width=F[0]+"px",P.height=F[1]+"px",S.position="absolute",S.left=-G+"px",S.top=-G+"px",S.width=F[0]+2*G+"px",S.height=F[1]+2*G+"px",X.appendChild(O)):(S.width=F[0]+"px",S.height=F[1]+"px",X=O,P=S);P.position="absolute";P.left=(Q-t.c[1])*F[0]+"px";P.top=(t.c[2]-N)*F[1]+"px";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),
+	r.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&
+	!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display="",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get("preload"));Uh(a,g);Wh(a,g);return!0};
+	function Vi(a,b){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth="none";b.style.position="absolute";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};
+	n.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,"precompose",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,"render",a,d));Xi(this,"postcompose",a,d)};
+	function Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};
+	n.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get("renderOrder");
+	void 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position="absolute";c.style.width="100%";c.style.height="100%";c.className="ol-unselectable";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement("DIV");this.b.className="ol-unselectable";c=this.b.style;c.position="absolute";c.width="100%";c.height="100%";R(this.b,"touchstart",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};
+	Yi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return"dom"};
+	Yi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,"precompose")||Ha(b,"postcompose")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,"precompose",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&"ready"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||
+	(this.b.style.display="",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,"postcompose",a)}else this.a&&(this.b.style.display="none",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b="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;}"}B(cj,aj);var dj=new cj;
+	function ej(){this.b="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;}"}B(ej,bj);var fj=new ej;
+	function gj(a,b){this.i=a.getUniformLocation(b,"j");this.j=a.getUniformLocation(b,"i");this.h=a.getUniformLocation(b,"k");this.l=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.c=a.getAttribLocation(b,"g");this.g=a.getAttribLocation(b,"d")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf("OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");R(this.C,"webglcontextlost",this.K,this);R(this.C,"webglcontextrestored",this.s,this)}B(jj,Aa);
+	function kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}
+	jj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};
+	function mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;
+	a.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+"/"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};
+	function qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);
+	function tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}
+	function uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=
+	H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};
+	function vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}
+	function wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}
+	sj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,
+	1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-
+	1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);
+	return u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}
+	sj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};
+	function yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};
+	yj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}
+	yj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};
+	function Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,"Image");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};
+	Fj.prototype.Ma=function(a){this.a=a};function Gj(){this.b="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;}"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b="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;}"}B(Ij,bj);var Jj=new Ij;
+	function Kj(a,b){this.c=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.h=a.getUniformLocation(b,"d");this.g=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);
+	function Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}
+	Lj.prototype.Jc=function(a,b,c){Nj(this,"precompose",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,"postcompose",
+	c,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b="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;}"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([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.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};
+	Tj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];
+	Mj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==
+	b.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,
+	v),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get("preload"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,
+	-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};
+	n.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};
+	n.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get("renderOrder");
+	void 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};
+	Xj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,"webglcontextlost",this.ge,this);R(this.b,"webglcontextrestored",this.he,this);this.a=new Xj;this.K=null;this.l=
+	new Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);
+	function Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,
+	6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}
+	n.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return"webgl"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};
+	function bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}
+	n.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display="none",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,"precompose",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&"ready"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=
+	e,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display="",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,"postcompose",a);Rf(this,a);a.postRenderFunctions.push(Pf)};
+	n.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=["canvas","webgl","dom"];
+	function Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(re?" 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.s=document.createElement("DIV");this.s.className="ol-overlaycontainer";this.a.appendChild(this.s);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",of,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);
+	this.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Sa,this);R(this.a,"mousewheel",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La("layergroup"),this.vd,this);R(this,La("view"),this.Kd,this);R(this,La("size"),this.Gd,this);R(this,La("target"),this.Id,
+	this);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},
+	this)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get("layers").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};
+	n.R=function(){Da(this.ma);Da(this.N);ya(this.a,"wheel",this.Sa,this);ya(this.a,"mousewheel",this.Sa,this);void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};
+	n.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get("target")};n.Ra=function(){var a=this.Wb();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};
+	function fk(a){return a.get("layergroup")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get("size")};n.U=function(){return this.get("view")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};
+	n.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get("active")&&!d.handleEvent(a))break}}};
+	n.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};
+	n.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,"keydown",this.Sa,this),R(a,"keypress",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener("resize",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener("resize",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};
+	n.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,"propertychange",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,"propertychange",this.render,this),R(a,"change",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get("layers").remove(a)};
+	n.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,
+	postRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td("moveend",this,h)),gb(h.extent,
+	this.va)));U(this,new Td("postrender",this,h));d=g=this.Fd;this&&(d=ea(g,this));"function"!=ba()||aa.Window&&aa.Window.prototype&&!xd("Edge")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};
+	n.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set("size",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set("size",void 0)};
+	function ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["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 e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L("string"==typeof e.href,44),L("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];
+	if("canvas"==k){if(qe){e=Ri;break}}else if("dom"==k){e=Yi;break}else if("webgl"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:
+	1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:
+	1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement("DIV");this.c.className="ol-overlay-container";this.c.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:"",sb:"",wb:"",xb:"",visible:!0};this.f=null;R(this,La("element"),this.td,this);R(this,La("map"),
+	this.Ad,this);R(this,La("offset"),this.Bd,this);R(this,La("position"),this.Dd,this);R(this,La("positioning"),this.Ed,this);void 0!==a.element&&this.set("element",a.element);this.set("offset",void 0!==a.offset?a.offset:[0,0]);this.set("positioning",void 0!==a.positioning?a.positioning:"top-left");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get("element"))&&this.c.appendChild(a)};
+	n.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get("map");a&&(this.f=R(a,"postrender",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};
+	n.Dd=function(){hk(this);if(void 0!==this.get("position")&&this.autoPan){var a=this.get("map");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get("element"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&
+	(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set("map",a)};n.Ac=function(a){this.set("position",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}
+	function jk(a,b){a.a.visible!==b&&(a.c.style.display=b?"":"none",a.a.visible=b)}
+	function hk(a){var b=a.get("map"),c=a.get("position");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get("offset"),f=a.get("positioning"),g=e[0],e=e[1];if("bottom-right"==f||"center-right"==f||"top-right"==f)""!==a.a.sb&&(a.a.sb=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.wb!=g&&(a.a.wb=b.right=g);else{""!==a.a.wb&&(a.a.wb=b.right="");if("bottom-center"==f||"center-center"==f||"top-center"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.sb!=g&&(a.a.sb=b.left=g)}if("bottom-left"==
+	f||"bottom-center"==f||"bottom-right"==f)""!==a.a.xb&&(a.a.xb=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{""!==a.a.lb&&(a.a.lb=b.bottom="");if("center-left"==f||"center-center"==f||"center-right"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a="geometry";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};
+	n.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,"change",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open("GET","function"===typeof a?a(d,e,f):a,!0);"arraybuffer"==b.$()&&(g.responseType="arraybuffer");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;"json"==a||"text"==a?d=g.responseText:"xml"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,"application/xml"))):"arraybuffer"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}
+	function qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}
+	function tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return"json"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?
+	(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,"XY",b);a.w();return a};n.$=function(){return"LineString"};
+	n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}
+	n.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,"XY",b);a.ua=c;a.w();return a};n.$=function(){return"MultiLineString"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,"XY",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return"MultiPoint"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,"XY",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};
+	function Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}
+	function Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,"XY",b);d.a=c;d.w();return d};n.$=function(){return"MultiPolygon"};
+	n.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,"XY",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b}
+	var Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new jc([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new jc([a.x,a.y,a.m],"XYM"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};
+	Ak.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if("number"===typeof c.x&&"number"===typeof c.y)d="Point";else if(c.points)d="MultiPoint";else if(c.paths)d=1===c.paths.length?"LineString":"MultiLineString";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||
+	g.push([e.reverse()])}c=pa({},c);1===g.length?(d="Polygon",c.rings=g[0]):(d="MultiPolygon",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};
+	Ak.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb("EPSG:"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],"change",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],"change",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};
+	n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return"GeometryCollection"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};
+	n.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}
+	var Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};
+	Gk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if("Feature"==a.type)c=[this.b(a,b)];else if("FeatureCollection"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};
+	Gk.prototype.c=function(a){a=a.crs;var b;a?"name"==a.type?b=Hb(a.properties.name):"EPSG"==a.type?b=Hb("EPSG:"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement("CANVAS"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,"change")};
+	Jk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext("2d");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,"change")};
+	Jk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,"error",this.j,this,!0),R(this.b,"load",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:"top-left";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:"fraction";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:"fraction";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==
+	a.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:"top-left";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?
+	a.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if("fraction"==this.l||"fraction"==this.i){if(!b)return null;a=this.g.slice();"fraction"==this.l&&(a[0]*=b[0]);"fraction"==this.i&&(a[1]*=b[1])}if("top-left"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if("top-right"==this.a||"bottom-right"==this.a)a[0]=-a[0]+b[0];if("bottom-left"==this.a||"bottom-right"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};
+	n.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if("top-left"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if("top-right"==this.c||"bottom-right"==this.c)a[0]=c[0]-b[0]-a[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};
+	n.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,"change",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,"change",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return"Circle"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,"XY",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};
+	n.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,"error",this.ce,this,!0),R(this.a,"load",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;
+	(function(){var a={},b={Aa:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.Aa=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q="function"==typeof require&&require;if(!p&&q)return require(l,!0);if(k)return k(l,!0);q=Error("Cannot find module '"+l+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=
+	a[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k="function"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}
+	function k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],
+	h;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a("quickselect");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,
+	d=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),
+	k=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},
+	ec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;
+	q=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,
+	f,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=
+	f,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,
+	d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=["return a"," - b",";"];this.Kb=new Function("a","b",b.join(a[0]));this.Lb=new Function("a","b",b.join(a[1]));this.la=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:
+	1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}
+	function Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,
+	d;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl("addfeature",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,"change",a.vc,a),R(c,"propertychange",a.vc,a)]}
+	function $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl("addfeature",h[d]))}
+	function Zk(a,b){var c=!1;R(a,"addfeature",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,"removefeature",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}
+	n.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl("clear"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}
+	n.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};
+	n.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl("changefeature",a))};
+	function Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl("removefeature",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);
+	function el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if("Circle"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],
+	g=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,
+	La("active"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}
+	function hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}
+	function pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}
+	function tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}
+	function ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl("drawstart",a.g))}
+	function nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}
+	function sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));"MultiPoint"===a.P?lk(b,new yk([c])):"MultiLineString"===a.P?lk(b,new xk([c])):"MultiPolygon"===a.P&&lk(b,new zk([c]));U(a,new dl("drawend",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;
+	function ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get("active");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;"Point"===a||"MultiPoint"===a?b=kl:"LineString"===a||"MultiLineString"===a?b=ll:"Polygon"===a||"MultiPolygon"===a?b=jl:"Circle"===a&&(b=rl);return b}var kl="Point",ll="LineString",jl="Polygon",rl="Circle";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||
+	0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};
+	wl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};
+	wl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};
+	wl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,"change",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}
+	function Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=""}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};
+	function Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+"/"+b+"/"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};
+	function Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;
+	function Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join("\n");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}
+	B(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl("tileloadstart",a));break;case 2:U(this,new Fl("tileloadend",a));break;case 3:U(this,new Fl("tileloaderror",a))}};function Hl(a,b,c){a.tileUrlFunction=b;"undefined"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}
+	Gl.prototype.s=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}
+	B(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};
+	n.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,"change",a.v,a);return e}
+	function $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}
+	function Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb("EPSG:3857").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,
+	tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};
+	Ql.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),
+	b==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d="round"),c=this.a.f,void 0===c&&(c="round"),e=this.a.h,void 0===
+	e&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):"-",f=this.i?rh(this.i):"-",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=["r"+e+f+(void 0!==
+	this.c?this.c.toString():"-")+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==
+	a.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;
+	n.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};
+	n.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y("ol.format.GeoJSON",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y("ol.format.EsriJSON",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y("ol.style.Style",yh);y("ol.style.Circle",ph);y("ol.style.RegularShape",Rl);y("ol.style.Fill",sh);y("ol.style.Stroke",xh);y("ol.style.Icon",Lk);
+	y("ol.style.Text",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:"#333"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y("ol.View",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;
+	uc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y("ol.control.defaults",ee);y("ol.layer.Tile",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;
+	W.prototype.on=W.prototype.Y;y("ol.layer.Vector",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y("ol.source.OSM",Ol);Ol.prototype.refresh=Ol.prototype.Ja;
+	y("ol.source.XYZ",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y("ol.Map",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;
+	Z.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y("ol.source.Vector",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;
+	Xk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y("ol.source.TileArcGISRest",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y("ol.Overlay",gk);gk.prototype.setPosition=gk.prototype.Ac;y("ol.Feature",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y("ol.geom.Point",jc);
+	jc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y("ol.geom.Polygon",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y("ol.geom.LineString",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y("ol.proj.Projection",Eb);Eb.prototype.getCode=Eb.prototype.l;
+	y("ol.interaction.Draw",el);el.prototype.on=el.prototype.Y;y("ol.animation.pan",Dc);y("ol.control.FullScreen",Xd);
+	  return OPENLAYERS.ol;
+	}));
+	
+	
+	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var mapMoveCls_1 = __webpack_require__(8);
+	/**
+	 * The single map move object catch is that it is common to multimap pages
+	 * @type {MapMoveCls}
+	 */
+	exports.mapMove = new mapMoveCls_1.default();
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = exports.mapMove;
+
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var mapInteractionBase_1 = __webpack_require__(9);
+	var checkDefined = __webpack_require__(10);
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * assists with map move interactions, trigger callback functions
+	 * @augments MapInteractionBase
+	 */
+	var MapMoveCls = (function (_super) {
+	    __extends(MapMoveCls, _super);
+	    /**
+	     * constructor called implicitly
+	     */
+	    function MapMoveCls() {
+	        _super.call(this, 'map move');
+	        this._arrLyrRequest = [];
+	        this._arrLyrTimeout = [];
+	        this._arrLayer = [];
+	        this._lookupLayer = {};
+	        this._mapMoveCallbacks = [];
+	        this._mapMoveCallbacksLookup = {};
+	        this._mapMoveCallbackDelays = [];
+	        this._mapMoveCallbackContext = [];
+	        this._mapMoveCallbackTimeout = [];
+	        this._mapExtent = undefined;
+	        this._zoomLevel = undefined;
+	    }
+	    /**
+	     * initialize the map move object
+	     * @param theMap - the ol map
+	     */
+	    MapMoveCls.prototype.init = function (theMap) {
+	        var _this = this;
+	        _super.prototype.init.call(this, theMap);
+	        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);
+	            }
+	        });
+	    };
+	    MapMoveCls.prototype._updateMapExtent = function () {
+	        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]
+	        };
+	    };
+	    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
+	        /**
+	         * return the map extent
+	         */
+	        get: function () {
+	            if (!this._mapExtent) {
+	                this._updateMapExtent();
+	            }
+	            return this._mapExtent;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * Trigger the layer load
+	     * @param lyr the layer being acted on
+	     * @param index index of the layer
+	     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
+	     */
+	    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
+	        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 () { };
+	        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
+	            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
+	            var _this_1 = this;
+	            callbackFunc = function () {
+	                function innerFunction(theLayer, theIndex) {
+	                    var _innerThis = this;
+	                    this._arrLyrRequest[theIndex] = $.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_1, lyr, index);
+	            };
+	        }
+	        else {
+	            lyr.clear();
+	        }
+	        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
+	    };
+	    /**
+	     * trigger the map move call back at the given index
+	     * @param ind - the index of the layer
+	     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
+	     * @param functionId=undefined the function id used to reference the added callback function
+	     */
+	    MapMoveCls.prototype.triggerMoveCallback = function (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 () {
+	            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  lyr - layer to add
+	     * @param triggerOnAdd - if the layer should be loaded on add
+	     */
+	    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
+	        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
+	        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);
+	        }
+	    };
+	    /**
+	     * add a callback to the map move event
+	     * @param func - callback function
+	     * @param context - the context to use for this function
+	     * @param delay=50 the delay before call load
+	     * @param triggerOnAdd if the layer should be loaded on add to mapMove
+	     * @param functionId optional id to reference the function later for outside triggering
+	     */
+	    MapMoveCls.prototype.addCallback = function (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 = makeGuid_1.default();
+	        }
+	        this._mapMoveCallbacks.push(func);
+	        this._mapMoveCallbacksLookup[functionId] = functionId;
+	        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);
+	        }
+	    };
+	    return MapMoveCls;
+	}(mapInteractionBase_1.default));
+	exports.MapMoveCls = MapMoveCls;
+	nm.MapMoveCls = MapMoveCls;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapMoveCls;
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 12/8/2015.
+	 */
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('olHelpers');
+	/**
+	 * base interaction
+	 */
+	var MapInteractionBase = (function () {
+	    /**
+	     * map interaction base
+	     * @param subtype - the interaction subtype
+	     */
+	    function MapInteractionBase(subtype) {
+	        this._map = null;
+	        this._initialized = false;
+	        this._subtype = subtype;
+	    }
+	    /**
+	     * base initializer, returns true for already initialized
+	     * @param theMap - the ol Map
+	     * @returns true for already initialized
+	     */
+	    MapInteractionBase.prototype.init = function (theMap) {
+	        if (!this._initialized) {
+	            this._map = theMap;
+	            this._initialized = true;
+	        }
+	    };
+	    Object.defineProperty(MapInteractionBase.prototype, "map", {
+	        /**
+	         * get reference to the ol map object
+	         * @returns {ol.Map} the map object
+	         */
+	        get: function () {
+	            return this._map;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
+	        /**
+	         * get if is initialized
+	         * @returns {boolean} is initialized
+	         */
+	        get: function () {
+	            return this._initialized;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    /**
+	     * Check the initialization status and throw exception if not valid yet
+	     * @protected
+	     */
+	    MapInteractionBase.prototype._checkInit = function () {
+	        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
+	     */
+	    MapInteractionBase.prototype.checkInit = function () {
+	        this._checkInit();
+	    };
+	    return MapInteractionBase;
+	}());
+	exports.MapInteractionBase = MapInteractionBase;
+	nm.MapInteractionBase = MapInteractionBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapInteractionBase;
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('util.checkDefined');
+	/**
+	 * check if the input is undefined or null
+	 * @param input - input pointer
+	 * @returns true undefined or null
+	 */
+	function undefinedOrNull(input) {
+	    "use strict";
+	    return (typeof input === 'undefined' || input === null);
+	}
+	exports.undefinedOrNull = undefinedOrNull;
+	nm.undefinedOrNull = undefinedOrNull;
+	/**
+	 * check if the input is defined and not null
+	 * @param input - input pointer
+	 * @returns true defined and not null
+	 */
+	function definedAndNotNull(input) {
+	    "use strict";
+	    return !(undefinedOrNull(input));
+	}
+	exports.definedAndNotNull = definedAndNotNull;
+	nm.definedAndNotNull = definedAndNotNull;
+
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('util');
+	/**
+	 * guids are used to uniquely identify groups and features
+	 * @returns {string} a new guid
+	 */
+	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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = makeGuid;
+
+
+/***/ },
+/* 12 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var mapPopupCls_1 = __webpack_require__(13);
+	/**
+	 * The single popup object catch is that it is common to multimap pages
+	 * @type {MapPopupCls}
+	 */
+	exports.mapPopup = new mapPopupCls_1.default();
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = exports.mapPopup;
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 11/3/2015.
+	 */
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	var mapInteractionBase_1 = __webpack_require__(9);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var $ = __webpack_require__(3);
+	var nm = provide_1.default('olHelpers');
+	var FeatureLayerProperties = (function () {
+	    /**
+	     *
+	     * @param feature the feature
+	     * @param layer - the layer in the popup
+	     * @param layerIndex - index of the layer
+	     * @param selectionLayer - the ol selection layer
+	     * @param [esriLayerName=undefined] - esri layer name
+	     */
+	    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+	        this.feature = feature;
+	        this.layer = layer;
+	        this.layerIndex = layerIndex;
+	        this.selectionLayer = selectionLayer;
+	        this.popupContent = '';
+	        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
+	    }
+	    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
+	        get: function () {
+	            if (typeof this.esriLayerName == 'string') {
+	                return this.esriLayerName;
+	            }
+	            else {
+	                return this.layer.name;
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return FeatureLayerProperties;
+	}());
+	exports.FeatureLayerProperties = FeatureLayerProperties;
+	/**
+	 * map popup class
+	 * @augments MapInteractionBase
+	 */
+	var MapPopupCls = (function (_super) {
+	    __extends(MapPopupCls, _super);
+	    /**
+	     * Definition for openlayers style function
+	     * @callback olStyleFunction
+	     * &param feature the openlayers vector feature
+	     * $param
+	     */
+	    /**
+	     * map popup constructor
+	     */
+	    function MapPopupCls() {
+	        _super.call(this, 'map popup');
+	        this._arrPopupLayerIds = [];
+	        this._arrPopupLayerNames = [];
+	        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 = [];
+	        this._esriMapServiceLayers = [];
+	        this._popupOpen = false;
+	        this._popupCoordinate = null;
+	        this._passThroughLayerFeatureArray = [];
+	        this._currentPopupIndex = -1;
+	        this._popupContentLength = 0;
+	    }
+	    /**
+	     * map popup initialization
+	     * @param {ol.Map} theMap - the ol map
+	     */
+	    MapPopupCls.prototype.init = function (theMap) {
+	        var _this = this;
+	        _super.prototype.init.call(this, theMap);
+	        var $map;
+	        var target = this.map.getTarget();
+	        if (typeof target == 'string') {
+	            $map = $('#' + target);
+	        }
+	        else {
+	            $map = $(target);
+	        }
+	        $map.append('<div class="ol-popup">' +
+	            '<span class="ol-popup-closer">X</span>' +
+	            '<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 custom_ol_1.ol.Overlay({ element: this._$popupContainer[0], autoPan: true,
+	            autoPanAnimation: {
+	                duration: 250,
+	                source: theMap.getView().getCenter()
+	            } });
+	        this._map.addOverlay(this._popupOverlay);
+	        this._$popupCloser.click(function (evt) {
+	            _this.closePopup();
+	        });
+	        // display popup on click
+	        this._map.on('singleclick', function (evt) {
+	            _this.closePopup();
+	            _this._popupCoordinate = evt['coordinate'];
+	            // esri map service layers
+	            if (_this._esriMapServiceLayers.length > 0) {
+	                var queryParams = {
+	                    geometry: evt['coordinate'].join(','),
+	                    geometryType: 'esriGeometryPoint',
+	                    layers: 'all',
+	                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
+	                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
+	                    imageDisplay: _this._map.getSize().join(',') + ',96',
+	                    returnGeometry: true,
+	                    tolerance: 15,
+	                    f: 'pjson'
+	                };
+	                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
+	                    var l = _a[_i];
+	                    l.getPopupInfo(queryParams);
+	                }
+	            }
+	            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
+	            _this._passThroughLayerFeatureArray = [];
+	            _this._currentPopupIndex = -1;
+	            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
+	                var featObj = layerFeatureObjectArray[i];
+	                var props = featObj.feature.getProperties();
+	                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
+	                //skip if return was false
+	                if (popupContentResponse === false) {
+	                }
+	                else if (typeof popupContentResponse == 'string') {
+	                    featObj.popupContent = popupContentResponse;
+	                    _this._passThroughLayerFeatureArray.push(featObj);
+	                }
+	                else {
+	                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
+	                }
+	            }
+	            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
+	            _this._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;\">" + _this._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>';
+	            _this._$popupContent.html(popupHtml);
+	            _this._$popupContent.find('.previous-popup').click(function () {
+	                if (_this._popupContentLength == 1) {
+	                    return;
+	                }
+	                if (_this._currentPopupIndex == 0) {
+	                    _this._currentPopupIndex = _this._popupContentLength - 1;
+	                }
+	                else {
+	                    _this._currentPopupIndex--;
+	                }
+	                _this._triggerFeatSelect();
+	            });
+	            var nextPopup = _this._$popupContent.find('.next-popup');
+	            nextPopup.click(function () {
+	                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
+	                    return;
+	                }
+	                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
+	                    _this._currentPopupIndex = 0;
+	                }
+	                else {
+	                    _this._currentPopupIndex++;
+	                }
+	                _this._triggerFeatSelect();
+	            });
+	            if (_this._popupContentLength > 0) {
+	                nextPopup.trigger('click');
+	                _this._popupOverlay.setPosition(_this._popupCoordinate);
+	                _this._$popupContent.scrollTop(0);
+	                _this._popupOpen = true;
+	            }
+	        });
+	        //change mouse cursor when over marker
+	        this._map.on('pointermove', function (evt) {
+	            if (evt['dragging']) {
+	                return;
+	            }
+	            var pixel = _this.map.getEventPixel(evt['originalEvent']);
+	            var hit = _this.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
+	                for (var _i = 0, _a = _this._arrPopupOlLayers; _i < _a.length; _i++) {
+	                    var olLayer = _a[_i];
+	                    if (lyrCandidate == olLayer) {
+	                        return true;
+	                    }
+	                }
+	                return false;
+	            });
+	            var mapElement = _this.map.getTargetElement();
+	            mapElement.style.cursor = hit ? 'pointer' : '';
+	        });
+	        return true;
+	    };
+	    /**
+	     * helper to select features
+	     * @private
+	     */
+	    MapPopupCls.prototype._triggerFeatSelect = function () {
+	        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);
+	        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
+	            var f = _a[_i];
+	            f(this._$popupContent);
+	        }
+	    };
+	    /**
+	     *
+	     * @param feature - the ol feature
+	     * @param {LayerEsriMapServer} lyr - the map server layer
+	     * @param {string} popupContent - popup content
+	     * @param {string} esriName - esri layer name
+	     */
+	    MapPopupCls.prototype.addMapServicePopupContent = function (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++;
+	        $('.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  pixel - the ol pixel
+	     * @returns  feature layer properties
+	     * @private
+	     */
+	    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
+	        var _this = this;
+	        var layerFeatureObjectArray = [];
+	        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+	            var lyrIndex = _this._arrPopupOlLayers.indexOf(layer);
+	            if (lyrIndex > -1) {
+	                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, _this._arrPopupLayers[lyrIndex], lyrIndex, _this._selectionLayers[lyrIndex]));
+	            }
+	        });
+	        return layerFeatureObjectArray;
+	    };
+	    MapPopupCls.prototype.closePopup = function () {
+	        this._checkInit();
+	        this._popupOpen = false;
+	        this._popupOverlay.setPosition(undefined);
+	        this._$popupCloser[0].blur();
+	        this.clearSelection();
+	        this._$popupContent.html('');
+	        return false;
+	    };
+	    ;
+	    /**
+	     *
+	     * @param chgFunction - popup change function
+	     */
+	    MapPopupCls.prototype.addPopupChangedFunction = function (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  the new selection layer
+	     * @private
+	     */
+	    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
+	        this._checkInit();
+	        selectionStyle = selectionStyle || {};
+	        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
+	        selectionStyle.width = selectionStyle.width || 10;
+	        var theStyle;
+	        if (selectionStyle.olStyle) {
+	            theStyle = selectionStyle.olStyle;
+	        }
+	        else {
+	            theStyle = new custom_ol_1.ol.style.Style({
+	                stroke: new custom_ol_1.ol.style.Stroke({
+	                    color: selectionStyle.color,
+	                    width: selectionStyle.width
+	                }),
+	                image: new custom_ol_1.ol.style.Circle({
+	                    radius: 7,
+	                    fill: new custom_ol_1.ol.style.Fill({ color: selectionStyle.color }),
+	                    stroke: new custom_ol_1.ol.style.Stroke({ color: selectionStyle.color, width: 1 })
+	                }),
+	                fill: new custom_ol_1.ol.style.Fill({
+	                    color: selectionStyle.color
+	                })
+	            });
+	        }
+	        var selectionLayer = new custom_ol_1.ol.layer.Vector({
+	            source: new custom_ol_1.ol.source.Vector(),
+	            style: theStyle,
+	            zIndex: 100
+	        });
+	        this._selectionLayers.push(selectionLayer);
+	        this._selectionLayerLookup[lyr.id] = selectionLayer;
+	        this.map.addLayer(selectionLayer);
+	        return selectionLayer;
+	    };
+	    /**
+	     * 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
+	     */
+	    MapPopupCls.prototype.addVectorPopup = function (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;
+	    };
+	    ;
+	    /**
+	     *
+	     * @param {LayerBase} lyr - layer
+	     */
+	    MapPopupCls.prototype.removeVectorPopup = function (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
+	     */
+	    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
+	        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+	        this._esriMapServiceLayers.push(lyr);
+	        return selectionLayer;
+	    };
+	    MapPopupCls.prototype.clearSelection = function () {
+	        this._checkInit();
+	        for (var i = 0; i < this._selectionLayers.length; i++) {
+	            this._selectionLayers[i].getSource().clear();
+	        }
+	        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
+	            var f = _a[_i];
+	            f();
+	        }
+	    };
+	    ;
+	    /**
+	     * Add a function to be called when the map is clicked but before any popups are implemented
+	     * @param {function} func - the map click function
+	     */
+	    MapPopupCls.prototype.addMapClickFunction = function (func) {
+	        this._mapClickFunctions.push(func);
+	    };
+	    return MapPopupCls;
+	}(mapInteractionBase_1.default));
+	nm.MapPopupCls = MapPopupCls;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = MapPopupCls;
+
+
+/***/ },
+/* 14 */,
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	/**
+	 * Created by gavorhes on 12/7/2015.
+	 */
+	var LayerBase_1 = __webpack_require__(16);
+	var esriToOl = __webpack_require__(18);
+	var mapPopup_1 = __webpack_require__(12);
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	/**
+	 * esri mapserver layer
+	 * @augments LayerBase
+	 */
+	var LayerEsriMapServer = (function (_super) {
+	    __extends(LayerEsriMapServer, _super);
+	    /**
+	     * 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
+	     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
+	     */
+	    function LayerEsriMapServer(url, options) {
+	        if (options === void 0) { options = {}; }
+	        _super.call(this, url, options);
+	        this._source = new custom_ol_1.ol.source.TileArcGISRest({
+	            url: this.url == '' ? undefined : this.url,
+	            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
+	        });
+	        this._olLayer = new custom_ol_1.ol.layer.Tile({
+	            source: this._source,
+	            visible: this.visible,
+	            opacity: this.opacity,
+	            minResolution: this._minResolution,
+	            maxResolution: this._maxResolution,
+	            zIndex: this._zIndex
+	        });
+	        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
+	        this._esriFormat = new custom_ol_1.ol.format.EsriJSON();
+	        this._popupRequest = null;
+	        this.addLegendContent();
+	        if (options.addPopup) {
+	            mapPopup_1.default.addMapServicePopup(this);
+	        }
+	    }
+	    /**
+	     * add additional content to the legend
+	     * @param {string} [additionalContent=''] additional content for legend
+	     */
+	    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
+	        var _this = this;
+	        var urlCopy = this.url;
+	        if (urlCopy[urlCopy.length - 1] !== '/') {
+	            urlCopy += '/';
+	        }
+	        urlCopy += 'legend?f=pjson&callback=?';
+	        $.get(urlCopy, {}, function (d) {
+	            var newHtml = esriToOl.makeMapServiceLegend(d);
+	            _super.prototype.addLegendContent.call(_this, newHtml);
+	        }, 'json');
+	    };
+	    LayerEsriMapServer.prototype.getPopupInfo = function (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 = $.get(urlCopy, queryParams, function (d) {
+	            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
+	                var r = _a[_i];
+	                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>';
+	                mapPopup_1.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
+	            }
+	        }, 'json').always(function () {
+	            _this._popupRequest = null;
+	        });
+	    };
+	    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
+	        /**
+	         *
+	         * @returns {ol.source.TileArcGISRest} the vector source
+	         */
+	        get: function () {
+	            return _super.prototype.getSource.call(this);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
+	        /**
+	         *
+	         * @returns the ol layer
+	         */
+	        get: function () {
+	            return _super.prototype.getOlLayer.call(this);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return LayerEsriMapServer;
+	}(LayerBase_1.LayerBase));
+	exports.LayerEsriMapServer = LayerEsriMapServer;
+	nm.LayerEsriMapServer = LayerEsriMapServer;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerEsriMapServer;
+
+
+/***/ },
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var zoomResolutionConvert = __webpack_require__(17);
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var nm = provide_1.default('layers');
+	var $ = __webpack_require__(3);
+	/**
+	 * 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) {
+	        if (options === void 0) { options = {}; }
+	        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 || makeGuid_1.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;
+	        /**
+	         *
+	         * @protected
+	         */
+	        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
+	     */
+	    LayerBase.prototype._load = function () {
+	        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
+	     */
+	    LayerBase.prototype.getLegendDiv = function () {
+	        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
+	     */
+	    LayerBase.prototype._addLegendContent = function (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 = $("#" + 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
+	     */
+	    LayerBase.prototype.addLegendContent = function (additionalContent) {
+	        this._addLegendContent(additionalContent);
+	    };
+	    LayerBase.prototype.applyCollapse = function () {
+	        if (this._applyCollapseCalled) {
+	            console.log('collapse already applied');
+	            return undefined;
+	        }
+	        this._$legendDiv = $("#" + 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 = $(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
+	     */
+	    LayerBase.prototype.refresh = function () {
+	        if (this.source) {
+	            this.source.refresh();
+	        }
+	    };
+	    Object.defineProperty(LayerBase.prototype, "legendContent", {
+	        /**
+	         * get the legend content
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._legendContent;
+	        },
+	        /**
+	         * set the legend content directly
+	         * @param {string} newVal - new content
+	         * @protected
+	         */
+	        set: function (newVal) {
+	            this._legendContent = newVal;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "params", {
+	        /**
+	         * get the map get params
+	         * @type {object}
+	         */
+	        get: function () {
+	            return this._params;
+	        },
+	        /**
+	         * set the map get params
+	         * @param {object} newParams - new get params
+	         * @protected
+	         */
+	        set: function (newParams) {
+	            this._params = newParams;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "minResolution", {
+	        /**
+	         * get the minimum resolution
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._minResolution;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "maxResolution", {
+	        /**
+	         * get the maximum resolution
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._maxResolution;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "minZoom", {
+	        /**
+	         * get min zoom
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._minZoom;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "maxZoom", {
+	        /**
+	         * get max zoom
+	         * @type {number|*}
+	         */
+	        get: function () {
+	            return this._maxZoom;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "url", {
+	        /**
+	         * get the url
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._url;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "visible", {
+	        /**
+	         * Get the layer visibility
+	         * @type {boolean}
+	         */
+	        get: function () {
+	            return this._visible;
+	        },
+	        /**
+	         * set the visibility
+	         * @param visibility
+	         */
+	        set: function (visibility) {
+	            this.setVisible(visibility);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.setVisible = function (visibility) {
+	        this._visible = visibility;
+	        if (this.olLayer) {
+	            this.olLayer.setVisible(this._visible);
+	            if (visibility && !this._loaded) {
+	                this._load();
+	            }
+	        }
+	    };
+	    Object.defineProperty(LayerBase.prototype, "opacity", {
+	        /**
+	         * Get the layer opacity
+	         * @type {number}
+	         */
+	        get: function () {
+	            return this._opacity;
+	        },
+	        /**
+	         * Set the layer opacity
+	         * @param {number} opacity - layer opacity
+	         */
+	        set: function (opacity) {
+	            this._opacity = opacity;
+	            if (this.olLayer) {
+	                this.olLayer.setOpacity(this._opacity);
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "name", {
+	        /**
+	         * Get the layer name
+	         * @type {string}
+	         */
+	        get: function () {
+	            return this._name;
+	        },
+	        /**
+	         * set the layer name
+	         * @param {string} newName - the new name
+	         */
+	        set: function (newName) {
+	            this._name = newName;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "loaded", {
+	        /**
+	         * Check if the layer is loaded
+	         * @type {boolean}
+	         */
+	        get: function () {
+	            return this._loaded;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(LayerBase.prototype, "source", {
+	        /**
+	         * get the layer source
+	         * @type {*}
+	         */
+	        get: function () {
+	            return this.getSource();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.getSource = function () {
+	        return this._source;
+	    };
+	    Object.defineProperty(LayerBase.prototype, "zIndex", {
+	        /**
+	         * get the z index
+	         */
+	        get: function () {
+	            return this._zIndex;
+	        },
+	        /**
+	         * set the z index
+	         */
+	        set: function (newZ) {
+	            this._zIndex = newZ;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.setZIndex = function (newZ) {
+	    };
+	    Object.defineProperty(LayerBase.prototype, "olLayer", {
+	        /**
+	         * the the ol layer
+	         */
+	        get: function () {
+	            return this.getOlLayer();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    LayerBase.prototype.getOlLayer = function () {
+	        return this._olLayer;
+	    };
+	    return LayerBase;
+	}());
+	exports.LayerBase = LayerBase;
+	nm.LayerBase = LayerBase;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerBase;
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/14/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('olHelpers.zoomResolutionConvert');
+	var _zoomResLookup = [
+	    156543.03392804097,
+	    78271.51696402048,
+	    39135.75848201024,
+	    19567.87924100512,
+	    9783.93962050256,
+	    4891.96981025128,
+	    2445.98490512564,
+	    1222.99245256282,
+	    611.49622628141,
+	    305.748113140705,
+	    152.8740565703525,
+	    76.43702828517625,
+	    38.21851414258813,
+	    19.109257071294063,
+	    9.554628535647032,
+	    4.777314267823516,
+	    2.388657133911758,
+	    1.194328566955879,
+	    0.5971642834779395,
+	    0.29858214173896974,
+	    0.14929107086948487,
+	    0.07464553543474244,
+	    0.03732276771737122,
+	    0.01866138385868561,
+	    0.009330691929342804,
+	    0.004665345964671402,
+	    0.002332672982335701,
+	    0.0011663364911678506,
+	    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;
+	    }
+	}
+	exports.zoomToResolution = zoomToResolution;
+	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;
+	}
+	exports.resolutionToZoom = resolutionToZoom;
+	nm.resolutionToZoom = resolutionToZoom;
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	var __extends = (this && this.__extends) || function (d, b) {
+	    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+	    function __() { this.constructor = d; }
+	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+	};
+	/**
+	 * Created by gavorhes on 1/4/2016.
+	 */
+	var provide_1 = __webpack_require__(4);
+	var custom_ol_1 = __webpack_require__(5);
+	var nm = provide_1.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 = (function () {
+	    /**
+	     *
+	     * @param symbolObj
+	     * @param {number} opacity
+	     */
+	    function CommonSymbol(symbolObj, opacity) {
+	        this.symbolObj = symbolObj;
+	        this.opacity = opacity;
+	        this.olStyle = undefined;
+	        this.legendHtml = '';
+	    }
+	    return CommonSymbol;
+	}());
+	var PointSymbol = (function (_super) {
+	    __extends(PointSymbol, _super);
+	    function PointSymbol(symbolObj, opacity) {
+	        _super.call(this, symbolObj, opacity);
+	        switch (this.symbolObj.type) {
+	            case 'esriSMS':
+	                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+	                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+	                var outlineWidth = this.symbolObj.outline.width;
+	                var radius = this.symbolObj.size;
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    image: new custom_ol_1.ol.style.Circle({
+	                        radius: radius,
+	                        fill: new custom_ol_1.ol.style.Fill({
+	                            color: innerColor
+	                        }),
+	                        stroke: new custom_ol_1.ol.style.Stroke({ color: outerColor, width: outlineWidth })
+	                    })
+	                });
+	                this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
+	                break;
+	            case 'esriPMS':
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    image: new custom_ol_1.ol.style.Icon({ src: "data:image/png;base64," + this.symbolObj['imageData'] })
+	                });
+	                this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + this.symbolObj['imageData'] + "\">";
+	                break;
+	            default:
+	                console.log(this.symbolObj);
+	                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);
+	        }
+	    }
+	    return PointSymbol;
+	}(CommonSymbol));
+	var LineSymbol = (function (_super) {
+	    __extends(LineSymbol, _super);
+	    function LineSymbol(symbolObj, opacity) {
+	        _super.call(this, symbolObj, opacity);
+	        switch (this.symbolObj.type) {
+	            case 'esriSLS':
+	                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+	                var lineWidth = this.symbolObj.width;
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    stroke: new custom_ol_1.ol.style.Stroke({
+	                        color: innerColor,
+	                        //lineDash: [4],
+	                        width: lineWidth
+	                    })
+	                });
+	                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+	                this.legendHtml += "style=\"";
+	                this.legendHtml += "background-color: " + innerColor + ";";
+	                this.legendHtml += "width: 40px;";
+	                this.legendHtml += "height: 4px;";
+	                this.legendHtml += "position: relative;";
+	                this.legendHtml += "display: inline-block;";
+	                this.legendHtml += "top: -1px;";
+	                this.legendHtml += "\"></span>";
+	                break;
+	            default:
+	                console.log(this.symbolObj);
+	                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);
+	        }
+	    }
+	    return LineSymbol;
+	}(CommonSymbol));
+	var PolygonSymbol = (function (_super) {
+	    __extends(PolygonSymbol, _super);
+	    function PolygonSymbol(symbolObj, opacity) {
+	        _super.call(this, symbolObj, opacity);
+	        switch (this.symbolObj['type']) {
+	            case 'esriSFS':
+	                var innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+	                var outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+	                var outlineWidth = this.symbolObj.outline.width;
+	                this.olStyle = new custom_ol_1.ol.style.Style({
+	                    stroke: new custom_ol_1.ol.style.Stroke({
+	                        color: outerColor,
+	                        //lineDash: [4],
+	                        width: outlineWidth
+	                    }),
+	                    fill: new custom_ol_1.ol.style.Fill({
+	                        color: innerColor
+	                    })
+	                });
+	                this.legendHtml = "<span class=\"legend-layer-icon\" ";
+	                this.legendHtml += "style=\"";
+	                this.legendHtml += "background-color: " + innerColor + ";";
+	                this.legendHtml += "border: solid " + outerColor + " 1px;";
+	                this.legendHtml += "width: 40px;";
+	                this.legendHtml += "height: 9px;";
+	                this.legendHtml += "position: relative;";
+	                this.legendHtml += "display: inline-block;";
+	                this.legendHtml += "top: 2px;";
+	                this.legendHtml += "\"></span>";
+	                break;
+	            default:
+	                console.log(this.symbolObj);
+	                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);
+	        }
+	    }
+	    return PolygonSymbol;
+	}(CommonSymbol));
+	var SymbolGenerator = (function () {
+	    function SymbolGenerator(esriResponse) {
+	        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
+	        this.renderer = esriResponse.drawingInfo.renderer;
+	        this.olStyle = undefined;
+	        this.legendHtml = '';
+	    }
+	    return SymbolGenerator;
+	}());
+	var SingleSymbol = (function (_super) {
+	    __extends(SingleSymbol, _super);
+	    /**
+	     *
+	     * @param {object} esriResponse - layer info
+	     * @param {Constructor|*} SymbolClass - the symbol class to use
+	     */
+	    function SingleSymbol(esriResponse, SymbolClass) {
+	        _super.call(this, esriResponse);
+	        this.symbol = this.renderer.symbol;
+	        var symbolObj = new SymbolClass(this.symbol, this.opacity);
+	        this.olStyle = symbolObj.olStyle;
+	        this.legendHtml = symbolObj.legendHtml;
+	    }
+	    return SingleSymbol;
+	}(SymbolGenerator));
+	var UniqueValueSymbol = (function (_super) {
+	    __extends(UniqueValueSymbol, _super);
+	    /**
+	     *
+	     * @param {object} esriResponse - layer info
+	     * @param {Constructor|*} SymbolClass - the Symbol class definition
+	     */
+	    function UniqueValueSymbol(esriResponse, SymbolClass) {
+	        var _this = this;
+	        _super.call(this, esriResponse);
+	        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];
+	        this.propertyName = this.renderer['field1'];
+	        this.defaultSymbol = this.renderer['defaultSymbol'];
+	        if (this.defaultSymbol) {
+	            var symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
+	            this.defaultStyle = symbolObj.olStyle;
+	            this.defaultLabelHtml = ("<span class=\"legend-layer-subitem\">" + htmlEscape(this.renderer['defaultLabel']) + "</span>") + symbolObj.legendHtml;
+	        }
+	        else {
+	            this.defaultStyle = undefined;
+	            this.defaultLabelHtml = 'other';
+	        }
+	        this.valueArray = [];
+	        this.labelArray = [];
+	        this.legendArray = [];
+	        this.propertyStyleLookup = {};
+	        for (var _i = 0, _a = this.uniqueValueInfos; _i < _a.length; _i++) {
+	            var uniqueVal = _a[_i];
+	            this.labelArray.push(uniqueVal['label']);
+	            this.valueArray.push(uniqueVal['value']);
+	            var uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
+	            this.legendArray.push(("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>") + uniqueSym.legendHtml);
+	            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+	        }
+	        this.olStyle = function (feature) {
+	            var checkProperties = feature.getProperties();
+	            var checkProperty = checkProperties[_this.propertyName];
+	            var returnValue;
+	            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
+	                returnValue = [_this.propertyStyleLookup[checkProperty]];
+	            }
+	            else {
+	                returnValue = [_this.defaultStyle];
+	            }
+	            return returnValue;
+	        };
+	        if (this.defaultLabelHtml !== null) {
+	            this.legendArray.push(this.defaultLabelHtml);
+	        }
+	        this.legendHtml = '<ul>';
+	        for (var _b = 0, _c = this.legendArray; _b < _c.length; _b++) {
+	            var h = _c[_b];
+	            this.legendHtml += "<li>" + h + "</li>";
+	        }
+	        this.legendHtml += '</ul>';
+	    }
+	    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 };
+	    }
+	}
+	exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+	nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
+	/**
+	 *
+	 * @param {object} lyrObject - the layer as defined in the response
+	 * @param {boolean} [skipLayerNameAndExpander=false] use only icons
+	 * @returns {string} legend html
+	 */
+	function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
+	    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }
+	    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;
+	    var layerName = lyrObject['layerName'];
+	    var legendItems = lyrObject['legend'];
+	    var legendHtml = '';
+	    if (!skipLayerNameAndExpander) {
+	        legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>";
+	    }
+	    if (legendItems.length == 1) {
+	        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
+	    }
+	    else {
+	        if (!skipLayerNameAndExpander) {
+	            legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>';
+	        }
+	        legendHtml += '<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 (!skipLayerNameAndExpander) {
+	        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;
+	}
+	exports.makeMapServiceLegend = makeMapServiceLegend;
+	nm.makeMapServiceLegend = makeMapServiceLegend;
+
+
+/***/ },
+/* 19 */,
+/* 20 */,
+/* 21 */,
+/* 22 */,
+/* 23 */,
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/16/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var makeGuid_1 = __webpack_require__(11);
+	var mapMove_1 = __webpack_require__(7);
+	var nm = provide_1.default('collections');
+	var $ = __webpack_require__(3);
+	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) {
+	        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 = makeGuid_1.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
+	     */
+	    LayerGroup.prototype.addGroup = function (groupConfig, parents) {
+	        var parent;
+	        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
+	     */
+	    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {
+	        var parent;
+	        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;
+	    };
+	    LayerGroup.prototype.getLegendHtml = function (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
+	     */
+	    LayerGroup.prototype._buildLegend = function (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 {boolean} [options.scaleDependent=true] if legend display is scale dependent
+	     */
+	    function LayerLegend(legendItems, divId, options) {
+	        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {
+	            var i = legendItems_1[_i];
+	            if (typeof i == 'undefined') {
+	                throw 'undefined item passed in array to legend constructor';
+	            }
+	        }
+	        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) {
+	            mapMove_1.default.checkInit();
+	        }
+	        this.$divElement = $('#' + divId);
+	        this._legendItems = legendItems;
+	        this.layerGroup = new LayerGroup();
+	        this._buildTree(legendItems);
+	        this.legendId = makeGuid_1.default();
+	        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
+	        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {
+	            var l = _b[_a];
+	            l.applyCollapse();
+	        }
+	        var _this = this;
+	        //// if legend display is scale dependent, make sure the mapMove object is initialized first
+	        if (options.scaleDependent) {
+	            mapMove_1.default.checkInit();
+	            mapMove_1.default.addCallback(function (ext, zoom, evt) {
+	                if (typeof evt == 'undefined' || evt == 'change:resolution') {
+	                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {
+	                        var lyr = _a[_i];
+	                        var $lyrLi = $('#' + lyr.id + '-layer-li');
+	                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
+	                            $lyrLi.addClass('layer-not-visible');
+	                        }
+	                        else {
+	                            $lyrLi.removeClass('layer-not-visible');
+	                        }
+	                    }
+	                }
+	            }, this, 100, true, 'legend1');
+	        }
+	        // <editor-fold desc="add event listeners">
+	        this.$divElement.find(".suppress-by-extent").change(function () {
+	            var legendLayerLis = $('.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 () {
+	            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
+	        });
+	        this.$divElement.find('.layer-group-expander').click(function () {
+	            var $this = $(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
+	     */
+	    LayerLegend.prototype._buildTree = function (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);
+	    };
+	    return LayerLegend;
+	}());
+	nm.LayerLegend = LayerLegend;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = LayerLegend;
+
+
+/***/ }
+/******/ ]);
+//# sourceMappingURL=simple_map.js.map
\ No newline at end of file
diff --git a/test-html/js/simple_map.js.map b/test-html/js/simple_map.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..204d2700cfb290ccf1c76fd49f6322bee62f6ed5
--- /dev/null
+++ b/test-html/js/simple_map.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8****","webpack:///./src-ts/_test/simple_map.ts","webpack:///./src-ts/olHelpers/quickMap.ts?6966*","webpack:///./src-ts/olHelpers/quickMapBase.ts?cef3*","webpack:///./~/jquery/dist/jquery.js?89fd**","webpack:///./src-ts/util/provide.ts?c446**","webpack:///./~/custom-ol/lib/index.js?e25d*","webpack:///./~/custom-ol/ol/ol-build.js?ed33*","webpack:///./src-ts/olHelpers/mapMove.ts?0e57*","webpack:///./src-ts/olHelpers/mapMoveCls.ts?c02e*","webpack:///./src-ts/olHelpers/mapInteractionBase.ts?686c*","webpack:///./src-ts/util/checkDefined.ts?efb5*","webpack:///./src-ts/util/makeGuid.ts?7a49*","webpack:///./src-ts/olHelpers/mapPopup.ts?f7f4*","webpack:///./src-ts/olHelpers/mapPopupCls.ts?19d5*","webpack:///./src-ts/layers/LayerEsriMapServer.ts?5e8f","webpack:///./src-ts/layers/LayerBase.ts?ca1c*","webpack:///./src-ts/olHelpers/zoomResolutionConvert.ts?51f3*","webpack:///./src-ts/olHelpers/esriToOlStyle.ts?67d2","webpack:///./src-ts/collections/LayerLegend.ts?9875"],"names":[],"mappings":"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AAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;KAED,MAAM,CAAC,GAAG,CAAC;AACf,EAAC;AAxEe,qBAAY,eAwE3B;AAED,GAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;mBAAe,YAAY,CAAC;;;;;;;AC/G5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;;AAED;;;;;AAKA;AACA;AACA;AACA;AAC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","file":"simple_map.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nimport {quickMap} from '../olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../collections/LayerLegend';\r\n\r\n\r\nlet map = quickMap();\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');\r\n\r\nlet sixYearPlan = new LayerEsriMapServer(\r\n    'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', {name: 'Six Year Plan', legendCollapse: true});\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(sixYearPlan.olLayer);\r\n\r\nlet layerArray = [\r\n    wisDotRegions,\r\n    sixYearPlan\r\n    // tipConfig.tipSegmentLayer,\r\n    // tipConfig.metamanagerSegments,\r\n    // {\r\n    //     groupName: 'ITS Inventory Layers',\r\n    //     collapse: true,\r\n    //     addCheck: false,\r\n    //     items: tipConfig.itsLayerCollection.layers\r\n    // }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/simple_map.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, 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\nimport {ol} from 'custom-ol'\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 the ol map\r\n */\r\nexport function quickMap(options? : quickMapOptions): ol.Map {\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMap.ts\n **/","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nconst $ = require('jquery');\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n}\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 [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options?: quickMapOptions): ol.Map {\r\n    options = options || {} as quickMapOptions;\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, 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        new ol.proj.Projection({code: \"EPSG:4326\"});\r\n\r\n        p.transform(new ol.proj.Projection({code: \"EPSG:4326\"}), new ol.proj.Projection({code: \"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],\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        //TODO add full screen options to ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/quickMapBase.ts\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","\"use strict\";\r\nexports.ol = require('../ol/ol-build');\r\n// // export default require('../ol/ol-build');\r\n//\r\n// const fish = 10;\r\n// export = fish;\r\n//\r\n//\r\n// export function cat(bird: string){\r\n//     console.log('eat the fish')\r\n// }\r\n//\r\n// export function nice(eat: number){\r\n//     console.log('eat that fish');\r\n// }\r\n//\r\n// export class Big{\r\n//     glenn: string;\r\n//\r\n//     constructor(isGlenn){\r\n//         this.glenn  = isGlenn;\r\n//     }\r\n//\r\n//     set isGlenn(f: string){\r\n//         console.log(this.glenn)\r\n//     }\r\n//\r\n//     run(){\r\n//         console.log(this.glenn + \" can run\");\r\n//     }\r\n// }\r\n//\r\n// export namespace HereIt{\r\n//\r\n//     export class Big2 {\r\n//         glenn: string;\r\n//\r\n//         constructor(isGlenn) {\r\n//             this.glenn = isGlenn;\r\n//         }\r\n//\r\n//         set isGlenn(f: string) {\r\n//             console.log(this.glenn)\r\n//         }\r\n//\r\n//         run() {\r\n//             console.log(this.glenn + \" can run\");\r\n//         }\r\n//     }\r\n//\r\n//\r\n// } \r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/lib/index.js\n ** module id = 5\n ** module chunks = 1 2 5\n **/","// OpenLayers 3. See http://openlayers.org/\r\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\r\n;(function (root, factory) {\r\n  if (typeof exports === \"object\") {\r\n    module.exports = factory();\r\n  } else if (typeof define === \"function\" && define.amd) {\r\n    define([], factory);\r\n  } else {\r\n    root.ol = factory();\r\n  }\r\n}(this, function () {\r\n  var OPENLAYERS = {};\r\n  var n,aa=this;\r\nfunction ba(){var a=aa.setImmediate,b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ca(a,b,c){return a.call.apply(a.bind,arguments)}function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}\r\nfunction ea(a,b,c){ea=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ca:da;return ea.apply(null,arguments)}function y(a,b){var c=a.split(\".\"),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript(\"var \"+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var fa;function B(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function I(){}function J(a){return a.ie||(a.ie=++ga)}var ga=0;if(\"undefined\"!==typeof window)var K=window;else\"undefined\"!==typeof global?K=global:\"undefined\"!==typeof self&&(K=self);function ha(a){this.message=\"Assertion failed. See /doc/errors/#\"+a+\" for details.\";this.code=a;this.name=\"AssertionError\"}B(ha,Error);function L(a,b){if(!a)throw new ha(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;\"cosh\"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){L(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b){var c=a%b;return 0>c*b?c+b:c};function ma(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function na(a){return a};function oa(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var pa=\"function\"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function qa(a){for(var b in a)delete a[b]}function ra(a){var b=[],c;for(c in a)b.push(a[c]);return b}function sa(a){for(var b in a)return!1;return!b};function ta(a){function b(b){var d=a.listener,e=a.jc||a.target;a.mc&&M(a);return d.call(e,b)}return a.kc=b}function ua(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jc===c)return d&&(e.deleteIndex=f),e}function va(a,b){var c=a.ha;return c?c[b]:void 0}function wa(a){var b=a.ha;b||(b=a.ha={});return b}\r\nfunction xa(a,b){var c=va(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kc),qa(c[d]);c.length=0;if(c=a.ha)delete c[b],0===Object.keys(c).length&&delete a.ha}}function R(a,b,c,d,e){var f=wa(a),g=f[b];g||(g=f[b]=[]);(f=ua(g,c,d,!1))?e||(f.mc=!1):(f={jc:d,mc:!!e,listener:c,target:a,type:b},a.addEventListener(b,ta(f)),g.push(f));return f}function ya(a,b,c,d){(a=va(a,b))&&(c=ua(a,c,d,!0))&&M(c)}\r\nfunction M(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kc);var b=va(a.target,a.type);if(b){var c=\"deleteIndex\"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&xa(a.target,a.type)}qa(a)}}function za(a){var b=wa(a),c;for(c in b)xa(a,c)};function Aa(){}Aa.prototype.ra=!1;function Da(a){a.ra||(a.ra=!0,a.R())}Aa.prototype.R=I;function T(a){this.type=a;this.target=null}T.prototype.preventDefault=T.prototype.stopPropagation=function(){this.qe=!0};function Ea(a){a.stopPropagation()}function Fa(a){a.preventDefault()};function Ga(){this.ca={};this.K={};this.C={}}B(Ga,Aa);Ga.prototype.addEventListener=function(a,b){var c=this.C[a];c||(c=this.C[a]=[]);-1===c.indexOf(b)&&c.push(b)};function U(a,b){var c=\"string\"===typeof b?new T(b):b,d=c.type;c.target=a;var e=a.C[d],f;if(e){d in a.K||(a.K[d]=0,a.ca[d]=0);++a.K[d];for(var g=0,h=e.length;g<h;++g)if(!1===e[g].call(a,c)||c.qe){f=!1;break}--a.K[d];if(0===a.K[d]){c=a.ca[d];for(delete a.ca[d];c--;)a.removeEventListener(d,I);delete a.K[d]}return f}}Ga.prototype.R=function(){za(this)};\r\nfunction Ha(a,b){return b?b in a.C:0<Object.keys(a.C).length}Ga.prototype.removeEventListener=function(a,b){var c=this.C[a];if(c){var d=c.indexOf(b);a in this.ca?(c[d]=I,++this.ca[a]):(c.splice(d,1),0===c.length&&delete this.C[a])}};function Ia(){Ga.call(this);this.b=0}B(Ia,Ga);Ia.prototype.w=function(){++this.b;U(this,\"change\")};Ia.prototype.Y=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c);return e}return R(this,a,b,c)};Ia.prototype.hd=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=R(this,a[f],b,c,!0);return e}return R(this,a,b,c,!0)};function Ja(a,b,c){T.call(this,a);this.key=b;this.oldValue=c}B(Ja,T);function V(a){Ia.call(this);J(this);this.M={};void 0!==a&&this.l(a)}B(V,Ia);var Ka={};function La(a){return Ka.hasOwnProperty(a)?Ka[a]:Ka[a]=\"change:\"+a}V.prototype.get=function(a){var b;this.M.hasOwnProperty(a)&&(b=this.M[a]);return b};V.prototype.Ea=function(){return pa({},this.M)};V.prototype.set=function(a,b,c){c?this.M[a]=b:(c=this.M[a],this.M[a]=b,c!==b&&(b=La(a),U(this,new Ja(b,a,c)),U(this,new Ja(\"propertychange\",a,c))))};\r\nV.prototype.l=function(a,b){for(var c in a)this.set(c,a[c],b)};function Ma(a,b){return a>b?1:a<b?-1:0}function Na(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function Oa(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(Oa(c)):a.concat(c)},[])}function Pa(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}\r\nfunction Qa(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function Ra(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}function Sa(a){var b=Ta,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function Ua(a,b){var c=b||Ma;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function Va(a){return function(b,c,d){if(void 0!==b)return b=Na(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function Wa(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function Xa(a){if(void 0!==a)return 0}function Ya(a,b){if(void 0!==a)return a+b}function Za(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function $a(){var a=5*Math.PI/180;return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function ab(a,b){a[0]+=b[0];a[1]+=b[1]}function bb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e};function cb(a){for(var b=db(),c=0,d=a.length;c<d;++c)eb(b,a[c]);return b}function fb(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function gb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function hb(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}function db(){return[Infinity,Infinity,-Infinity,-Infinity]}function ib(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}\r\nfunction jb(a){return ib(Infinity,Infinity,-Infinity,-Infinity,a)}function kb(a,b){var c=a[0],d=a[1];return ib(c,d,c,d,b)}function lb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function mb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3])}function eb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}\r\nfunction nb(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}function ob(a){var b=0;pb(a)||(b=qb(a)*rb(a));return b}function sb(a){return[a[0],a[1]]}function tb(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}\r\nfunction ub(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,k=a[0],l=a[1];a=k-c+h;d=k-c-h;g=k+c-h;c=k+c+h;var h=l-f-b,k=l-f+b,m=l+f+b,f=l+f-b;return ib(Math.min(a,d,g,c),Math.min(h,k,m,f),Math.max(a,d,g,c),Math.max(h,k,m,f),e)}function rb(a){return a[3]-a[1]}function vb(a,b){var c=db();wb(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function xb(a){return[a[0],a[3]]}\r\nfunction qb(a){return a[2]-a[0]}function wb(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function pb(a){return a[2]<a[0]||a[3]<a[1]};function yb(){return!0}function zb(){return!1};/*\r\n\r\n Latitude/longitude spherical geodesy formulae taken from\r\n http://www.movable-type.co.uk/scripts/latlong.html\r\n Licensed under CC-BY-3.0.\r\n*/\r\nfunction Ab(a){this.radius=a}function Bb(a,b){var c=a[1]*Math.PI/180,d=b[1]*Math.PI/180,e=(d-c)/2,f=(b[0]-a[0])*Math.PI/180/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*Cb.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))}\r\nAb.prototype.offset=function(a,b,c){var d=a[1]*Math.PI/180;b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(a[0]*Math.PI/180+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var Cb=new Ab(6370997);var Db={};Db.degrees=2*Math.PI*Cb.radius/360;Db.ft=.3048;Db.m=1;Db[\"us-ft\"]=1200/3937;\r\nfunction Eb(a){this.ya=a.code;this.a=a.units;this.h=void 0!==a.extent?a.extent:null;this.c=void 0!==a.global?a.global:!1;this.b=!(!this.c||!this.h);this.i=void 0!==a.getPointResolution?a.getPointResolution:this.j;this.f=null;this.g=a.metersPerUnit;var b=Fb,c=a.code,d=Gb||K.proj4;if(\"function\"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0===a.metersPerUnit&&(this.g=e.to_meter);void 0===a.units&&(this.a=e.units);var f,g;for(f in b)if(a=d.defs(f),void 0!==a)if(b=Hb(f),a===e)Ib([b,this]);\r\nelse{g=d(f,c);a=g.forward;g=g.inverse;var b=Hb(b),h=Hb(this);Jb(b,h,Kb(a));Jb(h,b,Kb(g))}}}}Eb.prototype.l=function(){return this.ya};Eb.prototype.G=function(){return this.h};function Lb(a){return a.g||Db[a.a]}Eb.prototype.j=function(a,b){if(\"degrees\"==this.a)return a;var c=Mb(this,Hb(\"EPSG:4326\")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(Bb(d.slice(0,2),d.slice(2,4))+Bb(d.slice(4,6),d.slice(6,8)))/2,d=Lb(this);void 0!==d&&(c/=d);return c};\r\nEb.prototype.getPointResolution=function(a,b){return this.i(a,b)};var Fb={},Ob={},Gb=null;function Ib(a){Pb(a);a.forEach(function(b){a.forEach(function(a){b!==a&&Jb(b,a,Qb)})})}function Rb(a){Fb[a.ya]=a;Jb(a,a,Qb)}function Pb(a){var b=[];a.forEach(function(a){b.push(Rb(a))})}function Sb(a){return a?\"string\"===typeof a?Hb(a):a:Hb(\"EPSG:3857\")}function Jb(a,b,c){a=a.ya;b=b.ya;a in Ob||(Ob[a]={});Ob[a][b]=c}\r\nfunction Kb(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function Hb(a){var b;if(a instanceof Eb)b=a;else if(\"string\"===typeof a){b=Fb[a];var c=Gb||K.proj4;void 0===b&&\"function\"==typeof c&&void 0!==c.defs(a)&&(b=new Eb({code:a}),Rb(b))}return b||null}function Tb(a,b){if(a===b)return!0;var c=a.a===b.a;return a.ya===b.ya?c:Mb(a,b)===Qb&&c}\r\nfunction Ub(a,b){var c=Hb(a),d=Hb(b);return Mb(c,d)}function Mb(a,b){var c=a.ya,d=b.ya,e;c in Ob&&d in Ob[c]&&(e=Ob[c][d]);void 0===e&&(e=Vb);return e}function Vb(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function Qb(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c};function Wb(){V.call(this);this.j=db();this.s=-1;this.f={};this.i=this.g=0}B(Wb,V);Wb.prototype.G=function(a){this.s!=this.b&&(this.j=this.mb(this.j),this.s=this.b);var b=this.j;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};Wb.prototype.transform=function(a,b){this.Hb(Ub(a,b));return this};function Xb(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var k=a[b],l=a[b+1];g[h++]=e[0]*k+e[2]*l+e[4];g[h++]=e[1]*k+e[3]*l+e[5]}f&&g.length!=h&&(g.length=h);return g};function Yb(){Wb.call(this);this.c=\"XY\";this.A=2;this.o=null}B(Yb,Wb);function Zb(a){var b;\"XY\"==a?b=2:\"XYZ\"==a||\"XYM\"==a?b=3:\"XYZM\"==a&&(b=4);return b}n=Yb.prototype;n.mb=function(a){var b=this.o,c=this.o.length,d=this.A;a=jb(a);return nb(a,b,0,c,d)};n.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.Qa(a);if(c.o.length<this.o.length)return this.f[b]=c;this.g=a;return this};\r\nn.Qa=function(){return this};function $b(a,b,c){a.A=Zb(b);a.c=b;a.o=c}function ac(a,b,c,d){if(b)c=Zb(b);else{for(b=0;b<d;++b){if(0===c.length){a.c=\"XY\";a.A=2;return}c=c[0]}c=c.length;var e;2==c?e=\"XY\":3==c?e=\"XYZ\":4==c&&(e=\"XYZM\");b=e}a.c=b;a.A=c}n.Hb=function(a){this.o&&(a(this.o,this.o,this.A),this.w())};\r\nn.rotate=function(a,b){var c=this.o;if(c){for(var d=c.length,e=this.A,f=c?c:[],g=Math.cos(a),h=Math.sin(a),k=b[0],l=b[1],m=0,p=0;p<d;p+=e){var q=c[p]-k,u=c[p+1]-l;f[m++]=k+q*g-u*h;f[m++]=l+q*h+u*g;for(q=p+2;q<p+e;++q)f[m++]=c[q]}c&&f.length!=m&&(f.length=m);this.w()}};\r\nn.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=tb(this.G()));if(c=this.o){b=c.length;for(var f=this.A,g=c?c:[],h=e[0],e=e[1],k=0,l=0;l<b;l+=f){var m=c[l]-h,p=c[l+1]-e;g[k++]=h+a*m;g[k++]=e+d*p;for(m=l+2;m<l+f;++m)g[k++]=c[m]}c&&g.length!=k&&(g.length=k);this.w()}};n.translate=function(a,b){var c=this.o;if(c){var d=c.length,e=this.A,f=c?c:[],g=0,h,k;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,k=h+2;k<h+e;++k)f[g++]=c[k];c&&f.length!=g&&(f.length=g);this.w()}};function bc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function cc(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function dc(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=cc(a,b,c[g],d),e[f++]=b;e.length=f;return e};function ec(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function fc(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];e[f++]=ec(a,b,k,d,e[f]);b=k}e.length=f;return e};function gc(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var k=Array(h);k[0]=1;k[h-1]=1;c=[b,c-d];for(var l=0,m;0<c.length;){var p=c.pop(),q=c.pop(),u=0,w=a[q],r=a[q+1],x=a[p],D=a[p+1];for(m=q+d;m<p;m+=d){var t,z=a[m];t=a[m+1];var C=w,E=r,v=x-C,H=D-E;if(0!==v||0!==H){var G=((z-C)*v+(t-E)*H)/(v*v+H*H);1<G?(C=x,E=D):0<G&&(C+=v*G,E+=H*G)}z=C-z;t=E-t;t=z*z+t*t;t>u&&(l=m,u=t)}u>e&&(k[(l-b)/d]=1,q+d<l&&c.push(q,l),l+d<p&&c.push(l,p))}for(m=0;m<h;++m)k[m]&&(f[g++]=\r\na[b+m*d],f[g++]=a[b+m*d+1]);return g}\r\nfunction hc(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k<l;++k){var m=c[k];a:{var p=a,q=m,u=d,w=e,r=f;if(b!=q){var x=w*Math.round(p[b]/w),D=w*Math.round(p[b+1]/w);b+=u;r[g++]=x;r[g++]=D;var t,z;do if(t=w*Math.round(p[b]/w),z=w*Math.round(p[b+1]/w),b+=u,b==q){r[g++]=t;r[g++]=z;break a}while(t==x&&z==D);for(;b<q;){var C,E;C=w*Math.round(p[b]/w);E=w*Math.round(p[b+1]/w);b+=u;if(C!=t||E!=z){var v=t-x,H=z-D,G=C-x,A=E-D;v*A==H*G&&(0>v&&G<v||v==G||0<v&&G>v)&&(0>H&&A<H||H==A||0<H&&A>H)||(r[g++]=t,r[g++]=\r\nz,x=t,D=z);t=C;z=E}}r[g++]=t;r[g++]=z}}h.push(g);b=m}return g};function ic(a,b){Yb.call(this);this.ea(a,b)}B(ic,Yb);n=ic.prototype;n.clone=function(){var a=new ic(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new ic(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LinearRing\"};n.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function jc(a,b){Yb.call(this);this.ea(a,b)}B(jc,Yb);n=jc.prototype;n.clone=function(){var a=new jc(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return this.o?this.o.slice():[]};n.mb=function(a){return kb(this.o,a)};n.$=function(){return\"Point\"};n.ea=function(a,b){a?(ac(this,b,a,0),this.o||(this.o=[]),this.o.length=bc(this.o,a)):$b(this,\"XY\",null);this.w()};function kc(a,b,c,d,e,f){for(var g=!1,h=a[c-d],k=a[c-d+1];b<c;b+=d){var l=a[b],m=a[b+1];k>f!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g};function lc(a,b,c,d,e,f,g){var h,k,l,m,p,q=e[f+1],u=[],w=c[0];l=a[w-d];p=a[w-d+1];for(h=b;h<w;h+=d){m=a[h];k=a[h+1];if(q<=p&&k<=q||p<=q&&q<=k)l=(q-p)/(k-p)*(m-l)+l,u.push(l);l=m;p=k}w=NaN;p=-Infinity;u.sort(Ma);l=u[0];h=1;for(k=u.length;h<k;++h){m=u[h];var r=Math.abs(m-l);if(r>p){l=(l+m)/2;var x;a:if(0!==c.length&&kc(a,b,c[0],d,l,q)){var D;x=1;for(D=c.length;x<D;++x)if(kc(a,c[x-1],c[x],d,l,q)){x=!1;break a}x=!0}else x=!1;x&&(w=l,p=r)}l=m}isNaN(w)&&(w=e[f]);return g?(g.push(w,q),g):[w,q]};function mc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],k=a[b+1],e=e+(h-f)*(k+g),f=h,g=k;return 0<e}function nc(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=mc(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}\r\nfunction oc(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],k=mc(a,b,h,d);if(0===f?e&&k||!e&&!k:e&&!k||!e&&k)for(var k=a,l=h,m=d;b<l-m;){var p;for(p=0;p<m;++p){var q=k[b+p];k[b+p]=k[l-m+p];k[l-m+p]=q}b+=m;l-=m}b=h}return b}function pc(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=oc(a,e,b[f],c,d);return e};function qc(a,b){Yb.call(this);this.ja=[];this.h=-1;this.v=null;this.u=-1;this.a=null;this.ea(a,b)}B(qc,Yb);n=qc.prototype;n.clone=function(){var a=new qc(null);rc(a,this.c,this.o.slice(),this.ja.slice());return a};n.za=function(a){var b;void 0!==a?(b=sc(this).slice(),oc(b,0,this.ja,this.A,a)):b=this.o;return fc(b,0,this.ja,this.A)};function tc(a){if(a.h!=a.b){var b=tb(a.G());a.v=lc(sc(a),0,a.ja,a.A,b,0);a.h=a.b}return a.v}\r\nfunction sc(a){if(a.u!=a.b){var b=a.o;nc(b,a.ja,a.A)?a.a=b:(a.a=b.slice(),a.a.length=oc(a.a,0,a.ja,a.A));a.u=a.b}return a.a}n.Qa=function(a){var b=[],c=[];b.length=hc(this.o,0,this.ja,this.A,Math.sqrt(a),b,0,c);a=new qc(null);rc(a,\"XY\",b,c);return a};n.$=function(){return\"Polygon\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ja);this.o.length=0===c.length?0:c[c.length-1];this.w()}else rc(this,\"XY\",null,this.ja)};\r\nfunction rc(a,b,c,d){$b(a,b,c);a.ja=d;a.w()};function uc(a){V.call(this);a=a||{};this.c=[0,0];var b={};b[vc]=void 0!==a.center?a.center:null;this.j=Sb(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=Va(c);else{d=Sb(a.projection);e=d.G();var h=(e?Math.max(qb(e),rb(e)):360*Db.degrees/Lb(d))/256/Math.pow(2,0),k=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;\r\nvoid 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):k);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=Wa(g,d,c-f)}this.f=d;this.i=e;this.s=g;this.g=a.resolutions;this.h=f;f=void 0!==a.extent?ma(a.extent):na;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?$a():!1===g?Ya:\"number\"===typeof g?Za(g):Ya):g=Xa;this.a=new oa(f,c,g);void 0!==a.resolution?b[wc]=a.resolution:void 0!==a.zoom&&(b[wc]=this.constrainResolution(this.f,\r\na.zoom-this.h));b[xc]=void 0!==a.rotation?a.rotation:0;this.l(b)}B(uc,V);n=uc.prototype;n.constrainResolution=function(a,b,c){return this.a.resolution(a,b||0,c||0)};n.constrainRotation=function(a,b){return this.a.rotation(a,b||0)};n.qa=function(){return this.get(vc)};n.lc=function(a){var b=this.qa();L(b,1);var c=this.O();L(void 0!==c,2);var d=this.get(xc);L(void 0!==d,3);return ub(b,c,d,a)};n.ia=function(){return this.j};n.O=function(){return this.get(wc)};\r\nfunction yc(a,b){return Math.max(qb(a)/b[0],rb(a)/b[1])}n.T=function(){var a=this.qa(),b=this.ia(),c=this.O(),d=this.get(xc);return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};n.rd=function(){var a,b=this.O();if(void 0!==b&&b>=this.i&&b<=this.f){a=this.h||0;var c,d;if(this.g){d=Na(this.g,b,1);a+=d;if(d==this.g.length-1)return a;c=this.g[d];d=c/this.g[d+1]}else c=this.f,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};\r\nn.md=function(a,b,c){if(!(a instanceof Yb)){L(Array.isArray(a),24);L(!pb(a),25);var d=a[0],e=a[1],f=a[2],g=a[3],d=[d,e,d,g,f,g,f,e,d,e],e=new qc(null);rc(e,\"XY\",d,[d.length]);a=e}d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var g=void 0!==d.constrainResolution?d.constrainResolution:!0,e=void 0!==d.nearest?d.nearest:!1,h;void 0!==d.minResolution?h=d.minResolution:void 0!==d.maxZoom?h=this.constrainResolution(this.f,d.maxZoom-this.h,0):h=0;var k=a.o,f=this.get(xc),d=Math.cos(-f),f=Math.sin(-f),\r\nl=Infinity,m=Infinity,p=-Infinity,q=-Infinity;a=a.A;for(var u=0,w=k.length;u<w;u+=a)var r=k[u]*d-k[u+1]*f,x=k[u]*f+k[u+1]*d,l=Math.min(l,r),m=Math.min(m,x),p=Math.max(p,r),q=Math.max(q,x);b=yc([l,m,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?h:Math.max(b,h);g&&(h=this.constrainResolution(b,0,0),!e&&h<b&&(h=this.constrainResolution(h,-1,0)),b=h);this.set(wc,b);f=-f;h=(l+p)/2+(c[1]-c[3])/2*b;b=(m+q)/2+(c[0]-c[2])/2*b;this.xa([h*d-b*f,b*d+h*f])};\r\nn.rotate=function(a,b){if(void 0!==b){var c,d=this.qa();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],bb(c,a-this.get(xc)),ab(c,b));this.xa(c)}this.set(xc,a)};n.xa=function(a){this.set(vc,a)};function zc(a,b){a.c[1]+=b}n.ye=function(a){a=this.constrainResolution(this.f,a-this.h,0);this.set(wc,a)};var vc=\"center\",wc=\"resolution\",xc=\"rotation\";function Ac(a){return 1-Math.pow(1-a,3)}function Bc(a){return 3*a*a-2*a*a*a}function Cc(a){return a};function Dc(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Bc;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var l=1-g((b.time-c)/f),m=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=l*m;b.viewState.center[1]+=l*p;b.viewHints[0]+=1;return!0}return!1}}\r\nfunction Ec(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var k=1-e((h.time-c)/d),k=(b-h.viewState.rotation)*k;h.animate=!0;h.viewState.rotation+=k;if(f){var l=h.viewState.center;l[0]-=f[0];l[1]-=f[1];bb(l,k);ab(l,f)}h.viewHints[0]+=1;return!0}return!1}}\r\nfunction Fc(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Bc;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),k=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*k;g.viewHints[0]+=1;return!0}return!1}};function Gc(a,b,c,d){this.H=a;this.I=b;this.J=c;this.L=d}function Hc(a,b,c){return a.H<=b&&b<=a.I&&a.J<=c&&c<=a.L}function Ic(a,b){return a.H==b.H&&a.J==b.J&&a.I==b.I&&a.L==b.L}function Jc(a,b){return a.H<=b.I&&a.I>=b.H&&a.J<=b.L&&a.L>=b.J};function Kc(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Lc(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Mc(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;L(Ua(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.c=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,L(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.c||this.f||(this.c=xb(b));L(!this.c&&this.f||this.c&&!this.f,18);this.g=null;void 0!==a.tileSizes&&(this.g=a.tileSizes,L(this.g.length==this.b.length,19));this.h=void 0!==a.tileSize?a.tileSize:\r\nthis.g?null:256;L(!this.h&&this.g||this.h&&!this.g,22);this.i=void 0!==b?b:null;this.a=null;this.l=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Gc(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&Nc(this,b)}var Oc=[0,0,0];function Pc(a,b,c,d,e){e=Qc(a,b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,Rc(a,e,b,d)))return!0;--b}return!1}Mc.prototype.G=function(){return this.i};Mc.prototype.pa=function(a){return this.c?this.c:this.f[a]};\r\nMc.prototype.O=function(a){return this.b[a]};function Sc(a,b,c,d){return b[0]<a.maxZoom?(d=Qc(a,b,d),Rc(a,d,b[0]+1,c)):null}function Tc(a,b,c,d){Uc(a,b[0],b[1],c,!1,Oc);var e=Oc[1],f=Oc[2];Uc(a,b[2],b[3],c,!0,Oc);a=Oc[1];b=Oc[2];void 0!==d?(d.H=e,d.I=a,d.J=f,d.L=b):d=new Gc(e,a,f,b);return d}function Rc(a,b,c,d){c=a.O(c);return Tc(a,b,c,d)}function Vc(a,b){var c=a.pa(b[0]),d=a.O(b[0]),e=Lc(Wc(a,b[0]),a.l);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}\r\nfunction Qc(a,b,c){var d=a.pa(b[0]),e=a.O(b[0]);a=Lc(Wc(a,b[0]),a.l);var f=d[0]+b[1]*a[0]*e;b=d[1]+b[2]*a[1]*e;return ib(f,b,f+a[0]*e,b+a[1]*e,c)}function Uc(a,b,c,d,e,f){var g=Xc(a,d),h=d/a.O(g),k=a.pa(g);a=Lc(Wc(a,g),a.l);b=h*Math.floor((b-k[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-k[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));e=b;void 0!==f?(f[0]=g,f[1]=e,f[2]=c):f=[g,e,c];return f}function Yc(a,b,c,d){c=a.O(c);return Uc(a,b[0],b[1],c,!1,d)}\r\nfunction Wc(a,b){return a.h?a.h:a.g[b]}function Xc(a,b,c){return ia(Na(a.b,b,c||0),a.minZoom,a.maxZoom)}function Nc(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=Rc(a,b,e);a.a=d};function Zc(a){var b=a.f;if(!b){var b=$c(a),c=ad(b,void 0,void 0),b=new Mc({extent:b,origin:xb(b),resolutions:c,tileSize:void 0});a.f=b}return b}function ad(a,b,c){b=void 0!==b?b:42;var d=rb(a);a=qb(a);c=Lc(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}function $c(a){a=Hb(a);var b=a.G();b||(a=180*Db.degrees/Lb(a),b=ib(-a,-a,a,a));return b};function bd(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null};function cd(a){V.call(this);this.a=a?a:[];dd(this)}B(cd,V);cd.prototype.clear=function(){for(;0<this.get(\"length\");)this.pop()};function ed(a,b,c){a.a.forEach(b,c)}cd.prototype.pop=function(){return fd(this,this.get(\"length\")-1)};cd.prototype.push=function(a){var b=this.a.length;this.a.splice(b,0,a);dd(this);U(this,new gd(hd,a));return b};cd.prototype.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return fd(this,c)};\r\nfunction fd(a,b){var c=a.a[b];a.a.splice(b,1);dd(a);U(a,new gd(id,c));return c}function dd(a){a.set(\"length\",a.a.length)}var hd=\"add\",id=\"remove\";function gd(a,b){T.call(this,a);this.element=b}B(gd,T);var jd=/^#(?:[0-9a-f]{3}){1,2}$/i,kd=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ld=/^(?: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,md=/^([a-z]*)$/i;function nd(a){if(\"string\"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a=\"rgba(\"+b+\",\"+c+\",\"+d+\",\"+(void 0===a[3]?1:a[3])+\")\"}return a}\r\nvar pd=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;md.exec(d)&&(e=document.createElement(\"div\"),e.style.color=d,document.body.appendChild(e),d=window.getComputedStyle(e).color,document.body.removeChild(e));jd.exec(d)?(f=d.length-1,L(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,\r\nd=(d<<4)+d),f=[f,e,d,1]):(g=ld.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=od([f,e,d,g])):(g=kd.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=od([f,e,d,1])):L(!1,14);d=f;a[c]=d;++b}return d}}();function od(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function qd(a){return\"string\"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:nd(a)};var rd=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function sd(a,b){return a<b?-1:a>b?1:0};function td(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var ud;a:{var vd=aa.navigator;if(vd){var wd=vd.userAgent;if(wd){ud=wd;break a}}ud=\"\"}function xd(a){return-1!=ud.indexOf(a)};var yd=xd(\"Opera\"),zd=xd(\"Trident\")||xd(\"MSIE\"),Ad=xd(\"Edge\"),Bd=xd(\"Gecko\")&&!(-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"))&&!(xd(\"Trident\")||xd(\"MSIE\"))&&!xd(\"Edge\"),Cd=-1!=ud.toLowerCase().indexOf(\"webkit\")&&!xd(\"Edge\"),Dd;\r\na:{var Ed=\"\",Fd=function(){var a=ud;if(Bd)return/rv\\:([^\\);]+)(\\)|;)/.exec(a);if(Ad)return/Edge\\/([\\d\\.]+)/.exec(a);if(zd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Cd)return/WebKit\\/(\\S+)/.exec(a);if(yd)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Fd&&(Ed=Fd?Fd[1]:\"\");if(zd){var Gd,Hd=aa.document;Gd=Hd?Hd.documentMode:void 0;if(null!=Gd&&Gd>parseFloat(Ed)){Dd=String(Gd);break a}}Dd=Ed}var Id={};function Jd(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Kd(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};var Ld=Jd();function Md(a,b){var c=document.createElement(\"CANVAS\");a&&(c.width=a);b&&(c.height=b);return c.getContext(\"2d\")}\r\nvar Nd=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),c,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate(1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}(),Od=function(){var a;return function(){if(void 0===a){var b=document.createElement(\"P\"),\r\nc,d={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(b);for(var e in d)e in b.style&&(b.style[e]=\"translate3d(1px,1px,1px)\",c=K.getComputedStyle(b).getPropertyValue(d[e]));document.body.removeChild(b);a=c&&\"none\"!==c}return a}}();\r\nfunction Pd(a,b){var c=a.style;c.WebkitTransform=b;c.MozTransform=b;c.b=b;c.msTransform=b;c.transform=b;if((c=zd)&&!(c=Id[\"9.0\"])){for(var c=0,d=rd(String(Dd)).split(\".\"),e=rd(\"9.0\").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 p=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==p[0].length&&0==q[0].length)break;c=sd(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||sd(0==\r\np[2].length,0==q[2].length)||sd(p[2],q[2])}while(0==c)}c=Id[\"9.0\"]=0<=c}c&&(a.style.transformOrigin=\"0 0\")}function Qd(a,b){var c;if(Od()){var d=Kd(Ld,b),e=Array(16);for(c=0;16>c;++c)e[c]=d[c].toFixed(6);Pd(a,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Nd()){d=Array(6);for(c=0;6>c;++c)d[c]=b[c].toFixed(6);Pd(a,\"matrix(\"+d.join(\",\")+\")\")}else a.style.left=Math.round(b[4])+\"px\",a.style.top=Math.round(b[5])+\"px\"}function Rd(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}\r\nfunction Sd(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Td(a,b,c){T.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}B(Td,T);function Ud(a){V.call(this);this.element=a.element?a.element:null;this.f=this.D=null;this.i=[];this.render=a.render?a.render:I;a.target&&(a=a.target,this.D=\"string\"===typeof a?document.getElementById(a):a)}B(Ud,V);Ud.prototype.R=function(){Sd(this.element);V.prototype.R.call(this)};\r\nUd.prototype.setMap=function(a){this.f&&Sd(this.element);for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i.length=0;if(this.f=a)(this.D?this.D:a.j).appendChild(this.element),this.render!==I&&this.i.push(R(a,\"postrender\",this.render,this)),a.render()};function Vd(a){a=a?a:{};this.B=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.B.appendChild(this.j);this.j.style.display=\"none\";this.g=void 0!==a.collapsed?a.collapsed:!0;this.v=void 0!==a.collapsible?a.collapsible:!0;this.v||(this.g=!1);var b=void 0!==a.className?a.className:\"ol-attribution\",c=void 0!==a.tipLabel?a.tipLabel:\"Attributions\",d=void 0!==a.collapseLabel?a.collapseLabel:\"\\u00bb\";\"string\"===typeof d?(this.h=document.createElement(\"span\"),this.h.textContent=d):this.h=\r\nd;d=void 0!==a.label?a.label:\"i\";\"string\"===typeof d?(this.s=document.createElement(\"span\"),this.s.textContent=d):this.s=d;var e=this.v&&!this.g?this.h:this.s,d=document.createElement(\"button\");d.setAttribute(\"type\",\"button\");d.title=c;d.appendChild(e);R(d,\"click\",this.P,this);c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\"+(this.g&&this.v?\" ol-collapsed\":\"\")+(this.v?\"\":\" ol-uncollapsible\");c.appendChild(this.B);c.appendChild(d);Ud.call(this,{element:c,render:a.render?\r\na.render:Wd,target:a.target});this.u=!0;this.c={};this.a={};this.N={}}B(Vd,Ud);\r\nfunction Wd(a){if(a=a.frameState){var b,c,d,e,f,g,h,k,l,m,p,q=a.layerStatesArray,u=pa({},a.attributions),w={},r=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.da())if(m=J(g).toString(),l=g.h)for(d=0,e=l.length;d<e;d++)if(h=l[d],k=J(h).toString(),!(k in u)){if(f=a.usedTiles[m]){var x=g.sa(r);a:{p=h;var D=r;if(p.b){var t,z,C,E=void 0;for(E in f)if(E in p.b){C=f[E];var v;t=0;for(z=p.b[E].length;t<z;++t){v=p.b[E][t];if(Jc(v,C)){p=!0;break a}var H=Rc(x,$c(D),parseInt(E,10)),G=H.I-H.H+\r\n1;if(C.H<H.H||C.I>H.I)if(Jc(v,new Gc(la(C.H,G),la(C.I,G),C.J,C.L))||C.I-C.H+1>G&&Jc(v,H)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(k in w&&delete w[k],u[k]=h):w[k]=h}b=[u,w];c=b[0];b=b[1];for(var A in this.c)A in c?(this.a[A]||(this.c[A].style.display=\"\",this.a[A]=!0),delete c[A]):A in b?(this.a[A]&&(this.c[A].style.display=\"none\",delete this.a[A]),delete b[A]):(Sd(this.c[A]),delete this.c[A],delete this.a[A]);for(A in c)d=document.createElement(\"LI\"),d.innerHTML=c[A].a,this.B.appendChild(d),this.c[A]=\r\nd,this.a[A]=!0;for(A in b)d=document.createElement(\"LI\"),d.innerHTML=b[A].a,d.style.display=\"none\",this.B.appendChild(d),this.c[A]=d;A=!sa(this.a)||!sa(a.logos);this.u!=A&&(this.element.style.display=A?\"\":\"none\",this.u=A);A&&sa(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var F;a=a.logos;A=this.N;for(F in A)F in a||(Sd(A[F]),delete A[F]);for(var Q in a)b=a[Q],b instanceof HTMLElement&&(this.j.appendChild(b),A[Q]=b),Q in A||(F=new Image,F.src=Q,\"\"===\r\nb?c=F:(c=document.createElement(\"a\"),c.href=b,c.appendChild(F)),this.j.appendChild(c),A[Q]=c);this.j.style.display=sa(a)?\"none\":\"\"}else this.u&&(this.element.style.display=\"none\",this.u=!1)}Vd.prototype.P=function(a){a.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?Rd(this.h,this.s):Rd(this.s,this.h);this.g=!this.g};function Xd(a){a=a?a:{};this.a=void 0!==a.className?a.className:\"ol-full-screen\";var b=void 0!==a.label?a.label:\"\\u2922\";this.g=\"string\"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:\"\\u00d7\";this.h=\"string\"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:\"Toggle full-screen\",b=document.createElement(\"button\");b.className=this.a+\"-\"+Yd();b.setAttribute(\"type\",\"button\");b.title=c;b.appendChild(this.g);R(b,\"click\",this.v,this);c=document.createElement(\"div\");\r\nc.className=this.a+\" ol-unselectable ol-control \"+(Zd()?\"\":\"ol-unsupported\");c.appendChild(b);Ud.call(this,{element:c,target:a.target});this.s=void 0!==a.keys?a.keys:!1;this.c=a.source}B(Xd,Ud);\r\nXd.prototype.v=function(a){a.preventDefault();Zd()&&(a=this.f)&&(Yd()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.c?\"string\"===typeof this.c?document.getElementById(this.c):this.c:a.Ra(),this.s?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):\r\n$d(a):$d(a)))};Xd.prototype.j=function(){var a=this.element.firstElementChild,b=this.f;Yd()?(a.className=this.a+\"-true\",Rd(this.h,this.g)):(a.className=this.a+\"-false\",Rd(this.g,this.h));b&&b.yb()};Xd.prototype.setMap=function(a){Ud.prototype.setMap.call(this,a);a&&this.i.push(R(K.document,ae(),this.j,this))};\r\nfunction Zd(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Yd(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}\r\nfunction $d(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var ae=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a=\"webkitfullscreenchange\":b.mozRequestFullScreen?a=\"mozfullscreenchange\":b.msRequestFullscreen?a=\"MSFullscreenChange\":b.requestFullscreen&&(a=\"fullscreenchange\")}return a}}();function be(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-rotate\",c=void 0!==a.label?a.label:\"\\u21e7\";this.a=null;\"string\"===typeof c?(this.a=document.createElement(\"span\"),this.a.className=\"ol-compass\",this.a.textContent=c):(this.a=c,this.a.classList.add(\"ol-compass\"));var d=a.tipLabel?a.tipLabel:\"Reset rotation\",c=document.createElement(\"button\");c.className=b+\"-reset\";c.setAttribute(\"type\",\"button\");c.title=d;c.appendChild(this.a);R(c,\"click\",be.prototype.s,this);d=document.createElement(\"div\");\r\nd.className=b+\" ol-unselectable ol-control\";d.appendChild(c);b=a.render?a.render:ce;this.g=a.resetNorth?a.resetNorth:void 0;Ud.call(this,{element:d,render:b,target:a.target});this.h=void 0!==a.duration?a.duration:250;this.c=void 0!==a.autoHide?a.autoHide:!0;this.j=void 0;this.c&&this.element.classList.add(\"ol-hidden\")}B(be,Ud);\r\nbe.prototype.s=function(a){a.preventDefault();if(void 0!==this.g)this.g();else{a=this.f;var b=a.U();if(b){var c=b.get(xc);void 0!==c&&(0<this.h&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.oa(Ec({rotation:c,duration:this.h,easing:Ac}))),b.set(xc,0))}}};\r\nfunction ce(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.j){var b=\"rotate(\"+a+\"rad)\";if(this.c){var c=this.element.classList.contains(\"ol-hidden\");c||0!==a?c&&0!==a&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=b;this.a.style.webkitTransform=b;this.a.style.transform=b}this.j=a}};function de(a){a=a?a:{};var b=void 0!==a.className?a.className:\"ol-zoom\",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:\"+\",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:\"\\u2212\",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:\"Zoom in\",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:\"Zoom out\",h=document.createElement(\"button\");h.className=b+\"-in\";h.setAttribute(\"type\",\"button\");h.title=f;h.appendChild(\"string\"===typeof d?document.createTextNode(d):d);R(h,\"click\",de.prototype.c.bind(this,\r\nc));d=document.createElement(\"button\");d.className=b+\"-out\";d.setAttribute(\"type\",\"button\");d.title=g;d.appendChild(\"string\"===typeof e?document.createTextNode(e):e);R(d,\"click\",de.prototype.c.bind(this,-c));c=document.createElement(\"div\");c.className=b+\" ol-unselectable ol-control\";c.appendChild(h);c.appendChild(d);Ud.call(this,{element:c,target:a.target});this.a=void 0!==a.duration?a.duration:250}B(de,Ud);\r\nde.prototype.c=function(a,b){b.preventDefault();var c=this.f,d=c.U();if(d){var e=d.O();e&&(0<this.a&&c.oa(Fc({resolution:e,duration:this.a,easing:Ac})),c=d.constrainResolution(e,a),d.set(wc,c))}};function ee(a){a=a?a:{};var b=new cd;(void 0!==a.zoom?a.zoom:1)&&b.push(new de(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new be(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Vd(a.attributionOptions));return b};var fe;\r\nfunction ge(){var a=aa.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!xd(\"Presto\")&&(a=function(){var a=document.createElement(\"IFRAME\");a.style.display=\"none\";a.src=\"\";document.documentElement.appendChild(a);var b=a.contentWindow,a=b.document;a.open();a.write(\"\");a.close();var c=\"callImmediate\"+Math.random(),d=\"file:\"==b.location.protocol?\"*\":b.location.protocol+\"//\"+b.location.host,a=ea(function(a){if((\"*\"==d||a.origin==d)&&a.data==\r\nc)this.port1.onmessage()},this);b.addEventListener(\"message\",a,!1);this.port1={};this.port2={postMessage:function(){b.postMessage(c,d)}}});if(\"undefined\"!==typeof a&&!xd(\"Trident\")&&!xd(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var a=c.nc;c.nc=null;a()}};return function(a){d.next={nc:a};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(a){var b=document.createElement(\"SCRIPT\");\r\nb.onreadystatechange=function(){b.onreadystatechange=null;b.parentNode.removeChild(b);b=null;a();a=null};document.documentElement.appendChild(b)}:function(a){aa.setTimeout(a,0)}};var he=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function ie(a,b){var c,d,e=he.length;for(d=0;d<e;++d)try{if(c=a.getContext(he[d],b))return c}catch(f){}return null};var je,ke=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",le=-1!==ke.indexOf(\"firefox\"),me=-1!==ke.indexOf(\"safari\")&&-1===ke.indexOf(\"chrom\"),ne=-1!==ke.indexOf(\"macintosh\"),oe=K.devicePixelRatio||1,pe=!1,qe=function(){if(!(\"HTMLCanvasElement\"in K))return!1;try{var a=Md();return a?(a.setLineDash&&(pe=!0),!0):!1}catch(b){return!1}}(),re=\"ontouchstart\"in K,se=\"PointerEvent\"in K,te=!!K.navigator.msPointerEnabled,ue=!1,ve=[];\r\nif(\"WebGLRenderingContext\"in K)try{var we=ie(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});we&&(ue=!0,ve=we.getSupportedExtensions())}catch(a){}je=ue;fa=ve;function xe(a,b){this.b=a;this.g=b};function ye(a){xe.call(this,a,{mousedown:this.Pd,mousemove:this.Qd,mouseup:this.Td,mouseover:this.Sd,mouseout:this.Rd});this.a=a.a;this.c=[]}B(ye,xe);function ze(a,b){for(var c=a.c,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var k=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=k)return!0}return!1}function Ae(a){var b=Be(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType=\"mouse\";return b}n=ye.prototype;\r\nn.Pd=function(a){if(!ze(this,a)){if((1).toString()in this.a){var b=Ae(a);Ce(this.b,De,b,a);delete this.a[(1).toString()]}b=Ae(a);this.a[(1).toString()]=a;Ce(this.b,Ee,b,a)}};n.Qd=function(a){if(!ze(this,a)){var b=Ae(a);Ce(this.b,Fe,b,a)}};n.Td=function(a){if(!ze(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=Ae(a),Ce(this.b,Ge,b,a),delete this.a[(1).toString()])}};n.Sd=function(a){if(!ze(this,a)){var b=Ae(a);He(this.b,b,a)}};\r\nn.Rd=function(a){if(!ze(this,a)){var b=Ae(a);Ie(this.b,b,a)}};function Je(a){xe.call(this,a,{MSPointerDown:this.Yd,MSPointerMove:this.Zd,MSPointerUp:this.be,MSPointerOut:this.$d,MSPointerOver:this.ae,MSPointerCancel:this.Xd,MSGotPointerCapture:this.Vd,MSLostPointerCapture:this.Wd});this.a=a.a;this.c=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}B(Je,xe);function Ke(a,b){var c=b;\"number\"===typeof b.pointerType&&(c=Be(b,b),c.pointerType=a.c[b.pointerType]);return c}n=Je.prototype;n.Yd=function(a){this.a[a.pointerId.toString()]=a;var b=Ke(this,a);Ce(this.b,Ee,b,a)};\r\nn.Zd=function(a){var b=Ke(this,a);Ce(this.b,Fe,b,a)};n.be=function(a){var b=Ke(this,a);Ce(this.b,Ge,b,a);delete this.a[a.pointerId.toString()]};n.$d=function(a){var b=Ke(this,a);Ie(this.b,b,a)};n.ae=function(a){var b=Ke(this,a);He(this.b,b,a)};n.Xd=function(a){var b=Ke(this,a);Ce(this.b,De,b,a);delete this.a[a.pointerId.toString()]};n.Wd=function(a){U(this.b,new Le(\"lostpointercapture\",a,a))};n.Vd=function(a){U(this.b,new Le(\"gotpointercapture\",a,a))};function Me(a){xe.call(this,a,{pointerdown:this.le,pointermove:this.me,pointerup:this.pe,pointerout:this.ne,pointerover:this.oe,pointercancel:this.ke,gotpointercapture:this.sd,lostpointercapture:this.Od})}B(Me,xe);n=Me.prototype;n.le=function(a){Ne(this.b,a)};n.me=function(a){Ne(this.b,a)};n.pe=function(a){Ne(this.b,a)};n.ne=function(a){Ne(this.b,a)};n.oe=function(a){Ne(this.b,a)};n.ke=function(a){Ne(this.b,a)};n.Od=function(a){Ne(this.b,a)};n.sd=function(a){Ne(this.b,a)};function Le(a,b,c){T.call(this,a);this.b=b;a=c?c:{};this.buttons=Oe(a);this.pressure=Pe(a,this.buttons);this.bubbles=\"bubbles\"in a?a.bubbles:!1;this.cancelable=\"cancelable\"in a?a.cancelable:!1;this.view=\"view\"in a?a.view:null;this.detail=\"detail\"in a?a.detail:null;this.screenX=\"screenX\"in a?a.screenX:0;this.screenY=\"screenY\"in a?a.screenY:0;this.clientX=\"clientX\"in a?a.clientX:0;this.clientY=\"clientY\"in a?a.clientY:0;this.button=\"button\"in a?a.button:0;this.relatedTarget=\"relatedTarget\"in a?a.relatedTarget:\r\nnull;this.pointerId=\"pointerId\"in a?a.pointerId:0;this.width=\"width\"in a?a.width:0;this.height=\"height\"in a?a.height:0;this.pointerType=\"pointerType\"in a?a.pointerType:\"\";this.isPrimary=\"isPrimary\"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}B(Le,T);function Oe(a){if(a.buttons||Qe)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}function Pe(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}\r\nvar Qe=!1;try{Qe=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(a){};function Re(a,b){xe.call(this,a,{touchstart:this.Ce,touchmove:this.Be,touchend:this.Ae,touchcancel:this.ze});this.a=a.a;this.l=b;this.c=void 0;this.h=0;this.f=void 0}B(Re,xe);n=Re.prototype;n.Uc=function(){this.h=0;this.f=void 0};\r\nfunction Se(a,b,c){b=Be(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.h;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.c===c.identifier;b.pointerType=\"touch\";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}\r\nfunction Te(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Se(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}\r\nn.Ce=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var k;if(!(k=1==g))a:{k=b.length;for(var l,m=0;m<k;m++)if(l=b[m],l.identifier===g-2){k=!0;break a}k=!1}k||e.push(h.out)}for(f=0;f<e.length;++f)this.Ib(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.c=b.identifier,b=K,void 0!==this.f&&b.clearTimeout(this.f);Ue(this,a);this.h++;Te(this,a,this.je)};\r\nn.je=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Rc:b.target};var c=this.b;b.bubbles=!0;Ce(c,Ve,b,a);c=this.b;b.bubbles=!1;Ce(c,We,b,a);Ce(this.b,Ee,b,a)};n.Be=function(a){a.preventDefault();Te(this,a,this.Ud)};n.Ud=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Rc;Ce(this.b,Fe,b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Ie(this.b,d,a),He(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Ib(a,b)));c.out=b;c.Rc=b.target}};\r\nn.Ae=function(a){Ue(this,a);Te(this,a,this.De)};n.De=function(a,b){Ce(this.b,Ge,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};n.ze=function(a){Te(this,a,this.Ib)};n.Ib=function(a,b){Ce(this.b,De,b,a);this.b.out(b,a);var c=this.b;b.bubbles=!1;Ce(c,Xe,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.c=void 0,this.f=K.setTimeout(this.Uc.bind(this),200))};\r\nfunction Ue(a,b){var c=a.l.c,d=b.changedTouches[0];if(a.c===d.identifier){var e=[d.clientX,d.clientY];c.push(e);K.setTimeout(function(){Qa(c,e)},2500)}};function Ye(a){Ga.call(this);this.g=a;this.a={};this.f={};this.b=[];se?Ze(this,new Me(this)):te?Ze(this,new Je(this)):(a=new ye(this),Ze(this,a),re&&Ze(this,new Re(this,a)));a=this.b.length;for(var b,c=0;c<a;c++)b=this.b[c],$e(this,Object.keys(b.g))}B(Ye,Ga);function Ze(a,b){var c=Object.keys(b.g);c&&(c.forEach(function(a){var c=b.g[a];c&&(this.f[a]=c.bind(b))},a),a.b.push(b))}Ye.prototype.c=function(a){var b=this.f[a.type];b&&b(a)};\r\nfunction $e(a,b){b.forEach(function(a){R(this.g,a,this.c,this)},a)}function af(a,b){b.forEach(function(a){ya(this.g,a,this.c,this)},a)}function Be(a,b){for(var c={},d,e=0,f=bf.length;e<f;e++)d=bf[e][0],c[d]=a[d]||b[d]||bf[e][1];return c}Ye.prototype.out=function(a,b){a.bubbles=!0;Ce(this,cf,a,b)};function Ie(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,Xe,b,c))}\r\nfunction He(a,b,c){b.bubbles=!0;Ce(a,Ve,b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,Ce(a,We,b,c))}function Ce(a,b,c,d){U(a,new Le(b,d,c))}function Ne(a,b){U(a,new Le(b.type,b,b))}Ye.prototype.R=function(){for(var a=this.b.length,b,c=0;c<a;c++)b=this.b[c],af(this,Object.keys(b.g));Ga.prototype.R.call(this)};\r\nvar Fe=\"pointermove\",Ee=\"pointerdown\",Ge=\"pointerup\",Ve=\"pointerover\",cf=\"pointerout\",We=\"pointerenter\",Xe=\"pointerleave\",De=\"pointercancel\",bf=[[\"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\",\r\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function df(a,b,c,d,e){Td.call(this,a,b,e);this.originalEvent=c;this.pixel=b.uc(c);this.coordinate=b.Ba(this.pixel);this.dragging=void 0!==d?d:!1}B(df,Td);df.prototype.preventDefault=function(){Td.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};df.prototype.stopPropagation=function(){Td.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function ef(a,b,c,d,e){df.call(this,a,b,c.b,d,e);this.b=c}B(ef,df);\r\nfunction ff(a){Ga.call(this);this.c=a;this.h=0;this.l=!1;this.f=[];this.a=null;a=this.c.a;this.v=0;this.s={};this.g=new Ye(a);this.b=null;this.i=R(this.g,Ee,this.Cd,this);this.j=R(this.g,Fe,this.re,this)}B(ff,Ga);function gf(a,b){var c;c=new ef(hf,a.c,b);U(a,c);0!==a.h?(K.clearTimeout(a.h),a.h=0,c=new ef(jf,a.c,b),U(a,c)):a.h=K.setTimeout(function(){this.h=0;var a=new ef(kf,this.c,b);U(this,a)}.bind(a),250)}\r\nfunction lf(a,b){b.type==mf||b.type==nf?delete a.s[b.pointerId]:b.type==of&&(a.s[b.pointerId]=!0);a.v=Object.keys(a.s).length}n=ff.prototype;n.xc=function(a){lf(this,a);var b=new ef(mf,this.c,a);U(this,b);!this.l&&0===a.button&&gf(this,this.a);0===this.v&&(this.f.forEach(M),this.f.length=0,this.l=!1,this.a=null,Da(this.b),this.b=null)};\r\nn.Cd=function(a){lf(this,a);var b=new ef(of,this.c,a);U(this,b);this.a=a;0===this.f.length&&(this.b=new Ye(document),this.f.push(R(this.b,pf,this.ee,this),R(this.b,mf,this.xc,this),R(this.g,nf,this.xc,this)))};n.ee=function(a){if(a.clientX!=this.a.clientX||a.clientY!=this.a.clientY){this.l=!0;var b=new ef(qf,this.c,a,this.l);U(this,b)}a.preventDefault()};n.re=function(a){U(this,new ef(a.type,this.c,a,!(!this.a||a.clientX==this.a.clientX&&a.clientY==this.a.clientY)))};\r\nn.R=function(){this.j&&(M(this.j),this.j=null);this.i&&(M(this.i),this.i=null);this.f.forEach(M);this.f.length=0;this.b&&(Da(this.b),this.b=null);this.g&&(Da(this.g),this.g=null);Ga.prototype.R.call(this)};var kf=\"singleclick\",hf=\"click\",jf=\"dblclick\",qf=\"pointerdrag\",pf=\"pointermove\",of=\"pointerdown\",mf=\"pointerup\",nf=\"pointercancel\",rf={Pe:kf,Ee:hf,Fe:jf,Ie:qf,Le:pf,He:of,Oe:mf,Ne:\"pointerover\",Me:\"pointerout\",Je:\"pointerenter\",Ke:\"pointerleave\",Ge:nf};function sf(a){V.call(this);var b=pa({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.l(b)}B(sf,V);\r\nfunction tf(a){var b=a.Xb(),c=a.Sb(),d=a.gb(),e=a.G(),f=a.Yb(),g=a.get(\"maxResolution\"),h=a.get(\"minResolution\");return{layer:a,opacity:ia(b,0,1),ac:c,visible:d,hb:!0,extent:e,zIndex:f,maxResolution:g,minResolution:Math.max(h,0)}}n=sf.prototype;n.G=function(){return this.get(\"extent\")};n.Xb=function(){return this.get(\"opacity\")};n.gb=function(){return this.get(\"visible\")};n.Yb=function(){return this.get(\"zIndex\")};n.Bc=function(a){this.set(\"opacity\",a)};n.Cc=function(a){this.set(\"visible\",a)};\r\nn.Dc=function(a){this.set(\"zIndex\",a)};function uf(a,b,c,d,e){T.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}B(uf,T);function vf(a){V.call(this);this.N=Hb(a.projection);this.h=wf(a.attributions);this.D=a.logo;this.P=void 0!==a.state?a.state:\"ready\";this.i=void 0!==a.wrapX?a.wrapX:!1}B(vf,V);function wf(a){if(\"string\"===typeof a)return[new bd({html:a})];if(a instanceof bd)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]=\"string\"===typeof e?new bd({html:e}):e}return c}return null}vf.prototype.fa=I;vf.prototype.ia=function(){return this.N};vf.prototype.T=function(){return this.P};\r\nvf.prototype.Ja=function(){this.w()};function xf(a){var b=pa({},a);delete b.source;sf.call(this,b);this.h=this.f=this.c=null;a.map&&this.setMap(a.map);R(this,La(\"source\"),this.Hd,this);this.$b(a.source?a.source:null)}B(xf,sf);function yf(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}n=xf.prototype;n.Pb=function(a){a=a?a:[];a.push(tf(this));return a};n.da=function(){return this.get(\"source\")||null};n.Sb=function(){var a=this.da();return a?a.T():\"undefined\"};n.fe=function(){this.w()};\r\nn.Hd=function(){this.h&&(M(this.h),this.h=null);var a=this.da();a&&(this.h=R(a,\"change\",this.fe,this));this.w()};n.setMap=function(a){this.c&&(M(this.c),this.c=null);a||this.w();this.f&&(M(this.f),this.f=null);a&&(this.c=R(a,\"precompose\",function(a){var c=tf(this);c.hb=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[J(this)]=c},this),this.f=R(this,\"change\",a.render,a),this.w())};n.$b=function(a){this.set(\"source\",a)};function zf(){this.b={};this.a=0}zf.prototype.clear=function(){this.b={};this.a=0};zf.prototype.get=function(a,b,c){a=b+\":\"+a+\":\"+(c?nd(c):\"null\");return a in this.b?this.b[a]:null};zf.prototype.set=function(a,b,c,d){this.b[b+\":\"+a+\":\"+(c?nd(c):\"null\")]=d;++this.a};var Af=new zf;var Bf=Array(6);function Cf(){return[1,0,0,1,0,0]}function Df(a){return Ef(a,1,0,0,1,0,0)}function Ff(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=b[0],l=b[1],m=b[2],p=b[3],q=b[4],u=b[5];a[0]=c*k+e*l;a[1]=d*k+f*l;a[2]=c*m+e*p;a[3]=d*m+f*p;a[4]=c*q+e*u+g;a[5]=d*q+f*u+h}function Ef(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Gf(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}\r\nfunction Hf(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function If(a,b){var c=Math.cos(b),d=Math.sin(b);Ff(a,Ef(Bf,c,d,-d,c,0,0))}function Jf(a,b,c){Ff(a,Ef(Bf,b,0,0,c,0,0))}function Kf(a,b,c){Ff(a,Ef(Bf,1,0,0,1,b,c))}function Lf(a,b,c,d,e,f,g,h){var k=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*k;a[2]=-d*k;a[3]=e*f;a[4]=g*d*f-h*d*k+b;a[5]=g*e*k+h*e*f+c;return a}\r\nfunction Mf(a){var b=a[0]*a[3]-a[1]*a[2];L(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b};function Nf(a,b){this.g=b;this.c={};this.j={}}B(Nf,Aa);function Of(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Lf(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Mf(Gf(d,c))}n=Nf.prototype;n.R=function(){for(var a in this.c)Da(this.c[a])};function Pf(){if(32<Af.a){var a=0,b,c;for(b in Af.b)c=Af.b[b],0!==(a++&3)||Ha(c)||(delete Af.b[b],--Af.a)}}\r\nn.fa=function(a,b,c,d,e,f){function g(a,e){var f=J(a).toString(),g=b.layerStates[J(e)].hb;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,k=b.viewState,l=k.resolution,m=k.projection,k=a;if(m.b){var m=m.G(),p=qb(m),q=a[0];if(q<m[0]||q>m[2])k=[q+p*Math.ceil((m[0]-q)/p),a[1]]}m=b.layerStatesArray;for(p=m.length-1;0<=p;--p){var u=m[p],q=u.layer;if(yf(u,l)&&e.call(f,q)&&(u=Qf(this,q),q.da()&&(h=u.fa(q.da().i?k:a,b,g,d)),h))return h}};\r\nn.Fc=function(a,b,c,d){return void 0!==this.fa(a,b,yb,this,c,d)};function Qf(a,b){var c=J(b).toString();if(c in a.c)return a.c[c];var d=a.Mb(b);a.c[c]=d;a.j[c]=R(d,\"change\",a.wd,a);return d}n.wd=function(){this.g.render()};n.vb=I;n.ue=function(a,b){for(var c in this.c)if(!(b&&c in b.layerStates)){var d=c,e=this.c[d];delete this.c[d];M(this.j[d]);delete this.j[d];Da(e)}};function Rf(a,b){for(var c in a.c)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.ue.bind(a));break}}\r\nfunction Ta(a,b){return a.zIndex-b.zIndex};function Sf(a,b){Ga.call(this);this.V=a;this.state=b;this.b=null;this.key=\"\"}B(Sf,Ga);function Tf(a){U(a,\"change\")}Sf.prototype.getKey=function(){return this.key+\"/\"+this.V};Sf.prototype.T=function(){return this.state};function Uf(a,b){this.j=a;this.f=b;this.b=[];this.c=[];this.a={}}Uf.prototype.clear=function(){this.b.length=0;this.c.length=0;qa(this.a)};function Vf(a){var b=a.b,c=a.c,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),Wf(a,0));b=a.f(d);delete a.a[b];return d}Uf.prototype.g=function(a){L(!(this.f(a)in this.a),31);var b=this.j(a);return Infinity!=b?(this.b.push(a),this.c.push(b),this.a[this.f(a)]=!0,Xf(this,0,this.b.length-1),!0):!1};\r\nfunction Wf(a,b){for(var c=a.b,d=a.c,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var k=2*b+1,l=2*b+2,k=l<e&&d[l]<d[k]?l:k;c[b]=c[k];d[b]=d[k];b=k}c[b]=f;d[b]=g;Xf(a,h,b)}function Xf(a,b,c){var d=a.b;a=a.c;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function Yf(a){var b=a.j,c=a.b,d=a.c,e=0,f=c.length,g,h,k;for(h=0;h<f;++h)g=c[h],k=b(g),Infinity==k?delete a.a[a.f(g)]:(d[e]=k,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)Wf(a,b)};function Zf(a,b){Uf.call(this,function(b){return a.apply(null,b)},function(a){return a[0].getKey()});this.C=b;this.l=0;this.h={}}B(Zf,Uf);Zf.prototype.g=function(a){var b=Uf.prototype.g.call(this,a);b&&R(a[0],\"change\",this.i,this);return b};Zf.prototype.i=function(a){a=a.target;var b=a.T();if(2===b||3===b||4===b||5===b)ya(a,\"change\",this.i,this),a=a.getKey(),a in this.h&&(delete this.h[a],--this.l),this.C()};function $f(){this.b=[];this.a=this.c=0}function ag(a,b){var c=a.a,d=.05-c,e=Math.log(.05/a.a)/-.005;return Dc({source:b,duration:e,easing:function(a){return c*(Math.exp(-.005*a*e)-1)/d}})};function bg(a){V.call(this);this.aa=null;this.set(\"active\",!0);this.handleEvent=a.handleEvent}B(bg,V);bg.prototype.setMap=function(a){this.aa=a};function cg(a,b,c,d,e){if(void 0!==c){var f=b.get(xc),g=b.qa();void 0!==f&&g&&e&&0<e&&(a.oa(Ec({rotation:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));b.rotate(c,d)}}function dg(a,b,c,d,e){var f=b.O();c=b.constrainResolution(f,c,0);eg(a,b,c,d,e)}\r\nfunction eg(a,b,c,d,e){if(c){var f=b.O(),g=b.qa();void 0!==f&&g&&c!==f&&e&&0<e&&(a.oa(Fc({resolution:f,duration:e,easing:Ac})),d&&a.oa(Dc({source:g,duration:e,easing:Ac})));if(d){var h;a=b.qa();e=b.O();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.xa(h)}b.set(wc,c)}};function fg(a){a=a?a:{};this.a=a.delta?a.delta:1;bg.call(this,{handleEvent:gg});this.c=void 0!==a.duration?a.duration:250}B(fg,bg);function gg(a){var b=!1,c=a.originalEvent;if(a.type==jf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.U();dg(b,e,c,d,this.c);a.preventDefault();b=!0}return!b};function hg(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function ig(a){a=a.originalEvent;return 0==a.button&&!(Cd&&ne&&a.ctrlKey)}function jg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function kg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function lg(a){a=a.originalEvent.target.tagName;return\"INPUT\"!==a&&\"SELECT\"!==a&&\"TEXTAREA\"!==a}function mg(a){L(a.b,56);return\"mouse\"==a.b.pointerType};function ng(a){a=a?a:{};bg.call(this,{handleEvent:a.handleEvent?a.handleEvent:og});this.Bb=a.handleDownEvent?a.handleDownEvent:zb;this.Cb=a.handleDragEvent?a.handleDragEvent:I;this.zb=a.handleMoveEvent?a.handleMoveEvent:I;this.Eb=a.handleUpEvent?a.handleUpEvent:zb;this.v=!1;this.N={};this.f=[]}B(ng,bg);function pg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}\r\nfunction og(a){if(!(a instanceof ef))return!0;var b=!1,c=a.type;if(c===of||c===qf||c===mf)c=a.b,a.type==mf?delete this.N[c.pointerId]:a.type==of?this.N[c.pointerId]=c:c.pointerId in this.N&&(this.N[c.pointerId]=c),this.f=ra(this.N);this.v&&(a.type==qf?this.Cb(a):a.type==mf&&(this.v=this.Eb(a)));a.type==of?(this.v=a=this.Bb(a),b=this.B(a)):a.type==pf&&this.zb(a);return!b}ng.prototype.B=function(a){return a};function qg(a){ng.call(this,{handleDownEvent:rg,handleDragEvent:sg,handleUpEvent:tg});a=a?a:{};this.a=a.kinetic;this.c=this.g=null;this.i=a.condition?a.condition:jg;this.h=!1}B(qg,ng);function sg(a){var b=pg(this.f);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.c){var c=this.c[0]-b[0],d=b[1]-this.c[1];a=a.map.U();var e=a.T(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;bb(c,e.rotation);ab(c,e.center);c=a.a.center(c);a.xa(c)}this.c=b}\r\nfunction tg(a){var b=a.map;a=b.U();if(0===this.f.length){var c;if(c=!this.h&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-100,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=.05<c.a}}c?(c=(.05-this.a.a)/-.005,e=this.a.c,f=a.qa(),this.g=ag(this.a,f),b.oa(this.g),f=ug(b,f),b=b.Ba([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.a.center(b),a.xa(b)):b.render();\r\nzc(a,-1);return!1}this.c=null;return!0}function rg(a){if(0<this.f.length&&this.i(a)){var b=a.map,c=b.U();this.c=null;this.v||zc(c,1);this.g&&Qa(b.D,this.g)&&(c.xa(a.frameState.viewState.center),this.g=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.h=1<this.f.length;return!0}return!1}qg.prototype.B=zb;function vg(a){a=a?a:{};ng.call(this,{handleDownEvent:wg,handleDragEvent:xg,handleUpEvent:yg});this.c=a.condition?a.condition:hg;this.a=void 0;this.g=void 0!==a.duration?a.duration:250}B(vg,ng);function xg(a){if(mg(a)){var b=a.map,c=b.Ta();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.U(),e=d.get(xc);cg(b,d,e-a)}this.a=c}}\r\nfunction yg(a){if(!mg(a))return!0;a=a.map;var b=a.U();zc(b,-1);var c=b.get(xc),d=this.g,c=b.constrainRotation(c,0);cg(a,b,c,void 0,d);return!1}function wg(a){return mg(a)&&ig(a)&&this.c(a)?(zc(a.map.U(),1),this.a=void 0,!0):!1}vg.prototype.B=zb;function zg(a){this.f=null;this.a=document.createElement(\"div\");this.a.style.position=\"absolute\";this.a.className=\"ol-box \"+a;this.c=this.g=this.b=null}B(zg,Aa);zg.prototype.R=function(){this.setMap(null)};function Ag(a){var b=a.g,c=a.c;a=a.a.style;a.left=Math.min(b[0],c[0])+\"px\";a.top=Math.min(b[1],c[1])+\"px\";a.width=Math.abs(c[0]-b[0])+\"px\";a.height=Math.abs(c[1]-b[1])+\"px\"}\r\nzg.prototype.setMap=function(a){if(this.b){this.b.s.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height=\"inherit\"}(this.b=a)&&this.b.s.appendChild(this.a)};function Bg(a){var b=a.g,c=a.c,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ba,a.b);b[4]=b[0].slice();a.f?a.f.ea([b]):a.f=new qc([b])}zg.prototype.S=function(){return this.f};function Cg(a,b,c){T.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}B(Cg,T);function Dg(a){ng.call(this,{handleDownEvent:Eg,handleDragEvent:Fg,handleUpEvent:Gg});a=a?a:{};this.a=new zg(a.className||\"ol-dragbox\");this.c=null;this.j=a.condition?a.condition:yb;this.i=a.boxEndCondition?a.boxEndCondition:Hg}B(Dg,ng);function Hg(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}\r\nfunction Fg(a){if(mg(a)){var b=this.a,c=a.pixel;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxdrag\",a.coordinate,a))}}Dg.prototype.S=function(){return this.a.S()};Dg.prototype.h=I;function Gg(a){if(!mg(a))return!0;this.a.setMap(null);this.i(a,this.c,a.pixel)&&(this.h(a),U(this,new Cg(\"boxend\",a.coordinate,a)));return!1}\r\nfunction Eg(a){if(mg(a)&&ig(a)&&this.j(a)){this.c=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.c;b.g=this.c;b.c=c;Bg(b);Ag(b);U(this,new Cg(\"boxstart\",a.coordinate,a));return!0}return!1};function Ig(a){a=a?a:{};var b=a.condition?a.condition:kg;this.g=void 0!==a.duration?a.duration:200;this.s=void 0!==a.out?a.out:!1;Dg.call(this,{condition:b,className:a.className||\"ol-dragzoom\"})}B(Ig,Dg);\r\nIg.prototype.h=function(){var a=this.aa,b=a.U(),c=a.Ta(),d=this.S().G();if(this.s){var e=b.lc(c),d=[ug(a,sb(d)),ug(a,[d[2],d[3]])],f=jb(void 0),g,h;g=0;for(h=d.length;g<h;++g)eb(f,d[g]);f=1/yc(f,c);d=(e[2]-e[0])/2*(f-1);f=(e[3]-e[1])/2*(f-1);e[0]-=d;e[2]+=d;e[1]-=f;e[3]+=f;d=e}c=b.constrainResolution(yc(d,c));e=b.O();f=b.qa();a.oa(Fc({resolution:e,duration:this.g,easing:Ac}));a.oa(Dc({source:f,duration:this.g,easing:Ac}));b.xa(tb(d));b.set(wc,c)};function Jg(a){bg.call(this,{handleEvent:Kg});a=a||{};this.a=function(a){return jg(a)&&lg(a)};this.c=void 0!==a.condition?a.condition:this.a;this.f=void 0!==a.duration?a.duration:100;this.g=void 0!==a.pixelDelta?a.pixelDelta:128}B(Jg,bg);\r\nfunction Kg(a){var b=!1;if(\"keydown\"==a.type){var c=a.originalEvent.keyCode;if(this.c(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.U(),e=b.O()*this.g,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];bb(c,b.get(xc));e=this.f;if(f=b.qa())e&&0<e&&d.oa(Dc({source:f,duration:e,easing:Cc})),d=b.a.center([f[0]+c[0],f[1]+c[1]]),b.xa(d);a.preventDefault();b=!0}}return!b};function Lg(a){bg.call(this,{handleEvent:Mg});a=a?a:{};this.c=a.condition?a.condition:lg;this.a=a.delta?a.delta:1;this.f=void 0!==a.duration?a.duration:100}B(Lg,bg);function Mg(a){var b=!1;if(\"keydown\"==a.type||\"keypress\"==a.type){var c=a.originalEvent.charCode;if(this.c(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.U();dg(b,d,c,void 0,this.f);a.preventDefault();b=!0}}return!b};function Ng(a){bg.call(this,{handleEvent:Og});a=a||{};this.a=0;this.i=void 0!==a.duration?a.duration:250;this.j=void 0!==a.useAnchor?a.useAnchor:!0;this.f=null;this.g=this.c=void 0}B(Ng,bg);\r\nfunction Og(a){var b=!1;if(\"wheel\"==a.type||\"mousewheel\"==a.type){var b=a.map,c=a.originalEvent;this.j&&(this.f=a.coordinate);var d;\"wheel\"==a.type?(d=c.deltaY,le&&c.deltaMode===K.WheelEvent.DOM_DELTA_PIXEL&&(d/=oe),c.deltaMode===K.WheelEvent.DOM_DELTA_LINE&&(d*=40)):\"mousewheel\"==a.type&&(d=-c.wheelDeltaY,me&&(d/=3));this.a+=d;void 0===this.c&&(this.c=Date.now());d=Math.max(80-(Date.now()-this.c),0);K.clearTimeout(this.g);this.g=K.setTimeout(this.h.bind(this,b),d);a.preventDefault();b=!0}return!b}\r\nNg.prototype.h=function(a){var b=ia(this.a,-1,1),c=a.U();dg(a,c,-b,this.f,this.i);this.a=0;this.f=null;this.g=this.c=void 0};function Pg(a){ng.call(this,{handleDownEvent:Qg,handleDragEvent:Rg,handleUpEvent:Sg});a=a||{};this.c=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==a.threshold?a.threshold:.3;this.i=void 0!==a.duration?a.duration:250}B(Pg,ng);\r\nfunction Rg(a){var b=0,c=this.f[0],d=this.f[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.g&&(b=c-this.g,this.h+=b,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=c;a=a.map;c=a.a.getBoundingClientRect();d=pg(this.f);d[0]-=c.left;d[1]-=c.top;this.c=a.Ba(d);this.a&&(c=a.U(),d=c.get(xc),a.render(),cg(a,c,d+b,this.c))}\r\nfunction Sg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);if(this.a){var c=b.get(xc),d=this.c,e=this.i,c=b.constrainRotation(c,0);cg(a,b,c,d,e)}return!1}return!0}function Qg(a){return 2<=this.f.length?(a=a.map,this.c=null,this.g=void 0,this.a=!1,this.h=0,this.v||zc(a.U(),1),a.render(),!0):!1}Pg.prototype.B=zb;function Tg(a){ng.call(this,{handleDownEvent:Ug,handleDragEvent:Vg,handleUpEvent:Wg});a=a?a:{};this.c=null;this.h=void 0!==a.duration?a.duration:400;this.a=void 0;this.g=1}B(Tg,ng);function Vg(a){var b=1,c=this.f[0],d=this.f[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.g=b);a=a.map;var e=a.U(),c=e.O(),d=a.a.getBoundingClientRect(),f=pg(this.f);f[0]-=d.left;f[1]-=d.top;this.c=a.Ba(f);a.render();eg(a,e,c*b,this.c)}\r\nfunction Wg(a){if(2>this.f.length){a=a.map;var b=a.U();zc(b,-1);var c=b.O(),d=this.c,e=this.h,c=b.constrainResolution(c,0,this.g-1);eg(a,b,c,d,e);return!1}return!0}function Ug(a){return 2<=this.f.length?(a=a.map,this.c=null,this.a=void 0,this.g=1,this.v||zc(a.U(),1),a.render(),!0):!1}Tg.prototype.B=zb;function Xg(a){var b=a||{};a=pa({},b);delete a.layers;b=b.layers;sf.call(this,a);this.c=[];this.a={};R(this,La(\"layers\"),this.yd,this);b?Array.isArray(b)?b=new cd(b.slice()):L(b instanceof cd,43):b=new cd;this.set(\"layers\",b)}B(Xg,sf);n=Xg.prototype;n.rb=function(){this.gb()&&this.w()};\r\nn.yd=function(){this.c.forEach(M);this.c.length=0;var a=this.get(\"layers\");this.c.push(R(a,hd,this.xd,this),R(a,id,this.zd,this));for(var b in this.a)this.a[b].forEach(M);qa(this.a);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.a[J(d).toString()]=[R(d,\"propertychange\",this.rb,this),R(d,\"change\",this.rb,this)];this.w()};n.xd=function(a){a=a.element;var b=J(a).toString();this.a[b]=[R(a,\"propertychange\",this.rb,this),R(a,\"change\",this.rb,this)];this.w()};\r\nn.zd=function(a){a=J(a.element).toString();this.a[a].forEach(M);delete this.a[a];this.w()};n.Pb=function(a){var b=void 0!==a?a:[],c=b.length;ed(this.get(\"layers\"),function(a){a.Pb(b)});a=tf(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?vb(e.extent,a.extent):a.extent);return b};n.Sb=function(){return\"ready\"};function Yg(a){Eb.call(this,{code:a,units:\"m\",extent:Zg,global:!0,worldExtent:$g})}B(Yg,Eb);Yg.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var ah=6378137*Math.PI,Zg=[-ah,-ah,ah,ah],$g=[-180,-85,180,85],bh=\"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(a){return new Yg(a)});\r\nfunction ch(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=6378137*Math.PI*a[e]/180,b[e+1]=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));return b}function dh(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/(6378137*Math.PI),b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var eh=new Ab(6378137);function fh(a,b){Eb.call(this,{code:a,units:\"degrees\",extent:gh,axisOrientation:b,global:!0,metersPerUnit:hh,worldExtent:gh})}B(fh,Eb);fh.prototype.getPointResolution=function(a){return a};\r\nvar gh=[-180,-90,180,90],hh=Math.PI*eh.radius/180,ih=[new fh(\"CRS:84\"),new fh(\"EPSG:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new fh(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new fh(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new fh(\"urn:ogc:def:crs:OGC:2:84\"),new fh(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new fh(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function W(a){a=a?a:{};var b=pa({},a);delete b.preload;delete b.useInterimTilesOnError;xf.call(this,b);this.set(\"preload\",void 0!==a.preload?a.preload:0);this.set(\"useInterimTilesOnError\",void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}B(W,xf);function jh(a){return a.get(\"useInterimTilesOnError\")};var kh=[0,0,0,1],lh=[],mh=[0,0,0,1];function nh(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function oh(a){this.C=a.opacity;this.K=a.rotateWithView;this.s=a.rotation;this.v=a.scale;this.B=a.snapToPixel};function ph(a){a=a||{};this.h=this.c=this.f=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.j=[0,0];this.i=this.u=this.l=null;var b=a.atlasManager,c,d=null,e,f=0;this.b&&(e=nd(this.b.a),f=this.b.c,void 0===f&&(f=1),d=this.b.b,pe||(d=null));var g=2*(this.a+f)+1;e={strokeStyle:e,jb:f,size:g,lineDash:d};if(void 0===b)b=Md(g,g),this.c=b.canvas,c=g=this.c.width,this.Oc(e,b,0,0),this.g?this.h=this.c:(b=Md(e.size,e.size),this.h=b.canvas,this.Nc(e,b,0,0));\r\nelse{g=Math.round(g);(d=!this.g)&&(c=this.Nc.bind(this,e));var f=this.b?qh(this.b):\"-\",h=this.g?rh(this.g):\"-\";this.f&&f==this.f[1]&&h==this.f[2]&&this.a==this.f[3]||(this.f=[\"c\"+f+h+(void 0!==this.a?this.a.toString():\"-\"),f,h,this.a]);b=b.add(this.f[0],g,g,this.Oc.bind(this,e),c);this.c=b.image;this.j=[b.offsetX,b.offsetY];c=b.image.width;d?this.h=b.Nd:this.h=this.c}this.l=[g/2,g/2];this.u=[g,g];this.i=[c,c];oh.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?\r\na.snapToPixel:!0})}B(ph,oh);n=ph.prototype;n.eb=function(){return this.l};n.ub=function(){return this.h};n.Z=function(){return this.c};n.ib=function(){return 2};n.Ob=function(){return this.i};n.pa=function(){return this.j};n.Ka=function(){return this.u};n.Vb=I;n.load=I;n.bc=I;\r\nn.Oc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=qd(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};\r\nn.Nc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=nd(kh);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function sh(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}function rh(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?J(a.b).toString():\"f\"+(a.b?nd(a.b):\"-\"));return a.a};function th(){this.a=-1};function uh(){this.a=64;this.b=Array(4);this.g=Array(this.a);this.b[0]=1732584193;this.b[1]=4023233417;this.b[2]=2562383102;this.b[3]=271733878;this.f=this.c=0}(function(){function a(){}a.prototype=th.prototype;uh.a=th.prototype;uh.prototype=new a;uh.prototype.constructor=uh;uh.b=function(a,c,d){for(var e=Array(arguments.length-2),f=2;f<arguments.length;f++)e[f-2]=arguments[f];return th.prototype[c].apply(a,e)}})();\r\nfunction vh(a,b,c){c||(c=0);var d=Array(16);if(\"string\"==typeof b)for(var e=0;16>e;++e)d[e]=b.charCodeAt(c++)|b.charCodeAt(c++)<<8|b.charCodeAt(c++)<<16|b.charCodeAt(c++)<<24;else for(e=0;16>e;++e)d[e]=b[c++]|b[c++]<<8|b[c++]<<16|b[c++]<<24;b=a.b[0];c=a.b[1];var e=a.b[2],f=a.b[3],g;g=b+(f^c&(e^f))+d[0]+3614090360&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[1]+3905402710&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[2]+606105819&4294967295;e=f+(g<<17&4294967295|g>>>15);g=\r\nc+(b^e&(f^b))+d[3]+3250441966&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[4]+4118548399&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[5]+1200080426&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[6]+2821735955&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[7]+4249261313&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[8]+1770035416&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[9]+2336552879&4294967295;f=b+(g<<12&4294967295|g>>>\r\n20);g=e+(c^f&(b^c))+d[10]+4294925233&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[11]+2304563134&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(f^c&(e^f))+d[12]+1804603682&4294967295;b=c+(g<<7&4294967295|g>>>25);g=f+(e^b&(c^e))+d[13]+4254626195&4294967295;f=b+(g<<12&4294967295|g>>>20);g=e+(c^f&(b^c))+d[14]+2792965006&4294967295;e=f+(g<<17&4294967295|g>>>15);g=c+(b^e&(f^b))+d[15]+1236535329&4294967295;c=e+(g<<22&4294967295|g>>>10);g=b+(e^f&(c^e))+d[1]+4129170786&4294967295;b=c+(g<<5&4294967295|\r\ng>>>27);g=f+(c^e&(b^c))+d[6]+3225465664&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[11]+643717713&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[0]+3921069994&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[5]+3593408605&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[10]+38016083&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[15]+3634488961&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[4]+3889429448&4294967295;c=e+(g<<20&4294967295|\r\ng>>>12);g=b+(e^f&(c^e))+d[9]+568446438&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[14]+3275163606&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[3]+4107603335&4294967295;e=f+(g<<14&4294967295|g>>>18);g=c+(f^b&(e^f))+d[8]+1163531501&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(e^f&(c^e))+d[13]+2850285829&4294967295;b=c+(g<<5&4294967295|g>>>27);g=f+(c^e&(b^c))+d[2]+4243563512&4294967295;f=b+(g<<9&4294967295|g>>>23);g=e+(b^c&(f^b))+d[7]+1735328473&4294967295;e=f+(g<<14&4294967295|\r\ng>>>18);g=c+(f^b&(e^f))+d[12]+2368359562&4294967295;c=e+(g<<20&4294967295|g>>>12);g=b+(c^e^f)+d[5]+4294588738&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[8]+2272392833&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[11]+1839030562&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[14]+4259657740&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[1]+2763975236&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[4]+1272893353&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^\r\nb^c)+d[7]+4139469664&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[10]+3200236656&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[13]+681279174&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[0]+3936430074&4294967295;f=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[3]+3572445317&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[6]+76029189&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(c^e^f)+d[9]+3654602809&4294967295;b=c+(g<<4&4294967295|g>>>28);g=f+(b^c^e)+d[12]+3873151461&4294967295;\r\nf=b+(g<<11&4294967295|g>>>21);g=e+(f^b^c)+d[15]+530742520&4294967295;e=f+(g<<16&4294967295|g>>>16);g=c+(e^f^b)+d[2]+3299628645&4294967295;c=e+(g<<23&4294967295|g>>>9);g=b+(e^(c|~f))+d[0]+4096336452&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[7]+1126891415&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[14]+2878612391&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[5]+4237533241&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[12]+1700485571&4294967295;b=c+\r\n(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[3]+2399980690&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[10]+4293915773&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[1]+2240044497&4294967295;c=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[8]+1873313359&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[15]+4264355552&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[6]+2734768916&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[13]+1309151649&4294967295;\r\nc=e+(g<<21&4294967295|g>>>11);g=b+(e^(c|~f))+d[4]+4149444226&4294967295;b=c+(g<<6&4294967295|g>>>26);g=f+(c^(b|~e))+d[11]+3174756917&4294967295;f=b+(g<<10&4294967295|g>>>22);g=e+(b^(f|~c))+d[2]+718787259&4294967295;e=f+(g<<15&4294967295|g>>>17);g=c+(f^(e|~b))+d[9]+3951481745&4294967295;a.b[0]=a.b[0]+b&4294967295;a.b[1]=a.b[1]+(e+(g<<21&4294967295|g>>>11))&4294967295;a.b[2]=a.b[2]+e&4294967295;a.b[3]=a.b[3]+f&4294967295}\r\nfunction wh(a,b){var c;void 0===c&&(c=b.length);for(var d=c-a.a,e=a.g,f=a.c,g=0;g<c;){if(0==f)for(;g<=d;)vh(a,b,g),g+=a.a;if(\"string\"==typeof b)for(;g<c;){if(e[f++]=b.charCodeAt(g++),f==a.a){vh(a,e);f=0;break}}else for(;g<c;)if(e[f++]=b[g++],f==a.a){vh(a,e);f=0;break}}a.c=f;a.f+=c};function xh(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.f=a.lineCap;this.b=void 0!==a.lineDash?a.lineDash:null;this.g=a.lineJoin;this.h=a.miterLimit;this.c=a.width;this.l=void 0}\r\nfunction qh(a){if(void 0===a.l){var b=\"s\"+(a.a?nd(a.a):\"-\")+\",\"+(void 0!==a.f?a.f.toString():\"-\")+\",\"+(a.b?a.b.toString():\"-\")+\",\"+(void 0!==a.g?a.g:\"-\")+\",\"+(void 0!==a.h?a.h.toString():\"-\")+\",\"+(void 0!==a.c?a.c.toString():\"-\"),c=new uh;wh(c,b);var d=Array((56>c.c?c.a:2*c.a)-c.c);d[0]=128;for(b=1;b<d.length-8;++b)d[b]=0;for(var e=8*c.f,b=d.length-8;b<d.length;++b)d[b]=e&255,e/=256;wh(c,d);d=Array(16);for(b=e=0;4>b;++b)for(var f=0;32>f;f+=8)d[e++]=c.b[b]>>>f&255;if(8192>=d.length)c=String.fromCharCode.apply(null,\r\nd);else for(c=\"\",b=0;b<d.length;b+=8192)c+=String.fromCharCode.apply(null,td(d,b,b+8192));a.l=c}return a.l};function yh(a){a=a||{};this.h=null;this.c=zh;void 0!==a.geometry&&Ah(this,a.geometry);this.g=void 0!==a.fill?a.fill:null;this.l=void 0!==a.image?a.image:null;this.f=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.text?a.text:null;this.b=a.zIndex}yh.prototype.S=function(){return this.h};yh.prototype.Z=function(){return this.l};function Ah(a,b){\"function\"===typeof b?a.c=b:\"string\"===typeof b?a.c=function(a){return a.get(b)}:b?b&&(a.c=function(){return b}):a.c=zh;a.h=b}\r\nfunction Bh(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a}var Ch=null;function Dh(){if(!Ch){var a=new sh({color:\"rgba(255,255,255,0.4)\"}),b=new xh({color:\"#3399CC\",width:1.25});Ch=[new yh({image:new ph({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Ch}\r\nfunction Eh(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yh({fill:new sh({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yh({stroke:new xh({color:b,width:5})}),new yh({stroke:new xh({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yh({image:new ph({radius:6,fill:new sh({color:c}),stroke:new xh({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,\r\na.Point);return a}function zh(a){return a.S()};function Y(a){a=a?a:{};var b=pa({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;xf.call(this,b);this.a=void 0!==a.renderBuffer?a.renderBuffer:100;this.s=null;this.g=void 0;this.v(a.style);this.i=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.j=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}B(Y,xf);Y.prototype.v=function(a){this.s=void 0!==a?a:Dh;this.g=null===a?void 0:Bh(this.s);this.w()};function Fh(){};function Gh(a,b,c,d,e){this.f=a;this.v=b;this.l=c;this.u=d;this.Ga=e;this.g=this.b=this.a=this.ha=this.P=this.N=null;this.aa=this.W=this.K=this.M=this.D=this.B=0;this.ba=!1;this.h=this.ra=0;this.ma=!1;this.Y=0;this.c=\"\";this.Ea=this.na=0;this.va=!1;this.j=this.wa=0;this.ca=this.C=this.i=null;this.s=[];this.Fa=Cf()}B(Gh,Fh);\r\nfunction Hh(a,b,c){if(a.g){b=Xb(b,0,c,2,a.u,a.s);c=a.f;var d=a.Fa,e=c.globalAlpha;1!=a.K&&(c.globalAlpha=e*a.K);var f=a.ra;a.ba&&(f+=a.Ga);var g,h;g=0;for(h=b.length;g<h;g+=2){var k=b[g]-a.B,l=b[g+1]-a.D;a.ma&&(k=Math.round(k),l=Math.round(l));if(0!==f||1!=a.h){var m=k+a.B,p=l+a.D;Lf(d,m,p,a.h,a.h,f,-m,-p);c.setTransform.apply(c,d)}c.drawImage(a.g,a.W,a.aa,a.Y,a.M,k,l,a.Y,a.M)}0===f&&1==a.h||c.setTransform(1,0,0,1,0,0);1!=a.K&&(c.globalAlpha=e)}}\r\nfunction Ih(a,b,c,d){var e=0;if(a.ca&&\"\"!==a.c){a.i&&Jh(a,a.i);a.C&&Kh(a,a.C);var f=a.ca,g=a.f,h=a.ha;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.ha={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Xb(b,e,c,d,a.u,a.s);f=a.f;g=a.wa;for(a.va&&(g+=a.Ga);e<c;e+=d){var h=b[e]+\r\na.na,k=b[e+1]+a.Ea;if(0!==g||1!=a.j){var l=Lf(a.Fa,h,k,a.j,a.j,g,-h,-k);f.setTransform.apply(f,l)}a.C&&f.strokeText(a.c,h,k);a.i&&f.fillText(a.c,h,k)}0===g&&1==a.j||f.setTransform(1,0,0,1,0,0)}}function Lh(a,b,c,d,e,f){var g=a.f;a=Xb(b,c,d,e,a.u,a.s);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Mh(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Lh(a,b,c,d[f],e,!0);return c}n=Gh.prototype;\r\nn.pc=function(a){if(wb(this.l,a.G())){if(this.a||this.b){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b;b=(b=a.o)?Xb(b,0,b.length,a.A,this.u,this.s):null;var c=b[2]-b[0],d=b[3]-b[1],c=Math.sqrt(c*c+d*d),d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}\"\"!==this.c&&Ih(this,a.o.slice(0,a.A),2,2)}};n.cb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};\r\nn.bb=function(a){var b=a.o;a=a.A;this.g&&Hh(this,b,b.length);\"\"!==this.c&&Ih(this,b,b.length,a)};n.qc=function(a){if(wb(this.l,a.G())){if(this.b){Kh(this,this.b);var b=this.f,c=a.o;b.beginPath();Lh(this,c,0,c.length,a.A,!1);b.stroke()}\"\"!==this.c&&(a=Nh(a),Ih(this,a,2,2))}};\r\nn.rc=function(a){var b=a.G();if(wb(this.l,b)){if(this.b){Kh(this,this.b);var b=this.f,c=a.o,d=0,e=a.ua,f=a.A;b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Lh(this,c,d,e[g],f,!1);b.stroke()}\"\"!==this.c&&(a=Oh(a),Ih(this,a,a.length,2))}};n.tc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f;b.beginPath();Mh(this,sc(a),0,a.ja,a.A);this.a&&b.fill();this.b&&b.stroke()}\"\"!==this.c&&(a=tc(a),Ih(this,a,2,2))}};\r\nn.sc=function(a){if(wb(this.l,a.G())){if(this.b||this.a){this.a&&Jh(this,this.a);this.b&&Kh(this,this.b);var b=this.f,c=Ph(a),d=0,e=a.a,f=a.A,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];b.beginPath();d=Mh(this,c,d,k,f);this.a&&b.fill();this.b&&b.stroke()}}\"\"!==this.c&&(a=Qh(a),Ih(this,a,a.length,2))}};function Jh(a,b){var c=a.f,d=a.N;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.N={fillStyle:b.fillStyle})}\r\nfunction Kh(a,b){var c=a.f,d=a.P;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),pe&&!Ra(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,pe&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=\r\nb.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.P={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}\r\nn.La=function(a,b){if(a){var c=a.b;this.a={fillStyle:qd(c?c:kh)}}else this.a=null;if(b){var c=b.a,d=b.f,e=b.b,f=b.g,g=b.c,h=b.h;this.b={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:this.v*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:nd(c?c:mh)}}else this.b=null};\r\nn.Ma=function(a){if(a){var b=a.eb(),c=a.Z(1),d=a.pa(),e=a.Ka();this.B=b[0];this.D=b[1];this.M=e[1];this.g=c;this.K=a.C;this.W=d[0];this.aa=d[1];this.ba=a.K;this.ra=a.s;this.h=a.v;this.ma=a.B;this.Y=e[0]}else this.g=null};\r\nn.Ca=function(a){if(a){var b=a.f;b?(b=b.b,this.i={fillStyle:qd(b?b:kh)}):this.i=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h;this.C={lineCap:void 0!==d?d:\"round\",lineDash:e?e:lh,lineJoin:void 0!==f?f:\"round\",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:nd(b?b:mh)}}else this.C=null;var b=a.b,d=a.a,e=a.c,f=a.g,g=a.h,c=a.l,h=a.j,k=a.C;a=a.K;this.ca={font:void 0!==b?b:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==a?a:\"middle\"};this.c=void 0!==\r\nh?h:\"\";this.na=void 0!==d?this.v*d:0;this.Ea=void 0!==e?this.v*e:0;this.va=void 0!==f?f:!1;this.wa=void 0!==g?g:0;this.j=this.v*(void 0!==c?c:1)}else this.c=\"\"};function Rh(a){Ia.call(this);this.a=a}B(Rh,Ia);Rh.prototype.fa=I;Rh.prototype.Ec=zb;Rh.prototype.l=function(a,b,c){return function(d,e){return Sh(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.V.toString()]=a})}};function Th(a){var b=a.a;b.gb()&&\"ready\"==b.Sb()&&a.w()}function Uh(a,b){b.Mc()&&a.postRenderFunctions.push(function(a,b,e){b=J(a).toString();a.Oa(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function Vh(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[J(c).toString()]=c}}\r\nfunction Wh(a,b){var c=b.D;void 0!==c&&(\"string\"===typeof c?a.logos[c]=\"\":c&&(L(\"string\"==typeof c.href,44),L(\"string\"==typeof c.src,45),a.logos[c.src]=c.href))}function Xh(a,b,c,d){b=J(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.H<a.H&&(a.H=d.H),d.I>a.I&&(a.I=d.I),d.J<a.J&&(a.J=d.J),d.L>a.L&&(a.L=d.L)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Yh(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]}\r\nfunction Zh(a,b,c,d,e,f,g,h,k,l){var m=J(b).toString();m in a.wantedTiles||(a.wantedTiles[m]={});var p=a.wantedTiles[m];a=a.tileQueue;var q=c.minZoom,u,w,r,x,D,t;for(t=g;t>=q;--t)for(w=Rc(c,f,t,w),r=c.O(t),x=w.H;x<=w.I;++x)for(D=w.J;D<=w.L;++D)g-t<=h?(u=$h(b,t,x,D,d,e),0==u.T()&&(p[u.getKey()]=!0,u.getKey()in a.a||a.g([u,m,Vc(c,u.V),r])),void 0!==k&&k.call(l,u)):b.Vc(t,x,D,e)};function ai(a){Rh.call(this,a);this.M=Cf()}B(ai,Rh);function bi(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=xb(c),k=[c[2],c[3]],l=[c[2],c[1]];c=sb(c);Hf(b.coordinateToPixelTransform,h);Hf(b.coordinateToPixelTransform,k);Hf(b.coordinateToPixelTransform,l);Hf(b.coordinateToPixelTransform,c);a.save();nh(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(k[0]*d,k[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();nh(a,g,e/2,f/2)}\r\nai.prototype.g=function(a,b,c){ci(this,\"precompose\",c,a,void 0);var d=this.Z();if(d){var e=b.extent,f=void 0!==e;f&&bi(c,a,e);var e=this.N,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}ci(this,\"postcompose\",c,a,void 0)};\r\nfunction ci(a,b,c,d,e){var f=a.a;if(Ha(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,k=d.viewState.rotation;nh(c,-k,g/2,h/2);a=void 0!==e?e:di(a,d,0);U(f,new uf(b,new Gh(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));nh(c,k,g/2,h/2)}}function di(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Lf(a.M,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ei(){};var fi=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function gi(a,b,c,d){this.ra=a;this.P=b;this.overlaps=d;this.g=null;this.h=0;this.resolution=c;this.ca=this.Y=null;this.a=[];this.coordinates=[];this.W=Cf();this.b=[];this.ha=[];this.aa=Cf();this.ba=Cf()}B(gi,Fh);\r\nfunction hi(a,b,c,d,e,f){var g=a.coordinates.length,h=a.Nb(),k=[b[c],b[c+1]],l=[NaN,NaN],m=!0,p,q,u;for(p=c+e;p<d;p+=e){l[0]=b[p];l[1]=b[p+1];u=h[1];var w=h[2],r=h[3],x=l[0],D=l[1],t=0;x<h[0]?t|=16:x>w&&(t|=4);D<u?t|=8:D>r&&(t|=2);0===t&&(t=1);u=t;u!==q?(m&&(a.coordinates[g++]=k[0],a.coordinates[g++]=k[1]),a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):1===u?(a.coordinates[g++]=l[0],a.coordinates[g++]=l[1],m=!1):m=!0;k[0]=l[0];k[1]=l[1];q=u}p===c+e&&(a.coordinates[g++]=k[0],a.coordinates[g++]=\r\nk[1]);f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+1]);return g}function ii(a,b){a.Y=[0,b,0];a.a.push(a.Y);a.ca=[0,b,0];a.b.push(a.ca)}\r\nfunction ji(a,b,c,d,e,f,g,h,k){var l;Ra(d,a.W)?l=a.ha:(l=Xb(a.coordinates,0,a.coordinates.length,2,d,a.ha),Gf(a.W,d));d=!sa(f);var m=0,p=g.length,q,u,w=a.aa,r=a.ba,x,D,t,z,C=0,E=0;for(a=a.a!=g||a.overlaps?0:200;m<p;){var v=g[m],H,G,A,F;switch(v[0]){case 0:q=v[1];d&&f[J(q).toString()]||!q.S()?m=v[2]:void 0===k||wb(k,q.S().G())?++m:m=v[2]+1;break;case 1:C>a&&(b.fill(),C=0);E>a&&(b.stroke(),E=0);C||E||b.beginPath();++m;break;case 2:q=v[1];u=l[q];v=l[q+1];t=l[q+2]-u;q=l[q+3]-v;q=Math.sqrt(t*t+q*q);b.moveTo(u+\r\nq,v);b.arc(u,v,q,0,2*Math.PI,!0);++m;break;case 3:b.closePath();++m;break;case 4:q=v[1];u=v[2];H=v[3];G=v[4]*c;A=v[5]*c;var Q=v[6],N=v[7],O=v[8],S=v[9];F=v[10];t=v[11];z=v[12];var X=v[13],P=v[14];for(F&&(t+=e);q<u;q+=2){v=l[q]-G;F=l[q+1]-A;X&&(v=Math.round(v),F=Math.round(F));if(1!=z||0!==t){var Ba=v+G,Nb=F+A;Lf(w,Ba,Nb,z,z,t,-Ba,-Nb);b.transform.apply(b,w)}Ba=b.globalAlpha;1!=N&&(b.globalAlpha=Ba*N);var Nb=P+O>H.width?H.width-O:P,Ca=Q+S>H.height?H.height-S:Q;b.drawImage(H,O,S,Nb,Ca,v,F,Nb*c,Ca*c);\r\n1!=N&&(b.globalAlpha=Ba);if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;case 5:q=v[1];u=v[2];A=v[3];Q=v[4]*c;N=v[5]*c;t=v[6];z=v[7]*c;H=v[8];G=v[9];for((F=v[10])&&(t+=e);q<u;q+=2){v=l[q]+Q;F=l[q+1]+N;if(1!=z||0!==t)Lf(w,v,F,z,z,t,-v,-F),b.transform.apply(b,w);O=A.split(\"\\n\");S=O.length;1<S?(X=Math.round(1.5*b.measureText(\"M\").width),F-=(S-1)/2*X):X=0;for(P=0;P<S;P++)Ba=O[P],G&&b.strokeText(Ba,v,F),H&&b.fillText(Ba,v,F),F+=X;if(1!=z||0!==t)Mf(Gf(r,w)),b.transform.apply(b,r)}++m;break;\r\ncase 6:if(void 0!==h&&(q=v[1],q=h(q)))return q;++m;break;case 7:a?C++:b.fill();++m;break;case 8:q=v[1];u=v[2];v=l[q];F=l[q+1];t=v+.5|0;z=F+.5|0;if(t!==x||z!==D)b.moveTo(v,F),x=t,D=z;for(q+=2;q<u;q+=2)if(v=l[q],F=l[q+1],t=v+.5|0,z=F+.5|0,q==u-2||t!==x||z!==D)b.lineTo(v,F),x=t,D=z;++m;break;case 9:C&&(b.fill(),C=0);b.fillStyle=v[1];++m;break;case 10:x=void 0!==v[7]?v[7]:!0;D=v[2];E&&(b.stroke(),E=0);b.strokeStyle=v[1];b.lineWidth=x?D*c:D;b.lineCap=v[3];b.lineJoin=v[4];b.miterLimit=v[5];pe&&b.setLineDash(v[6]);\r\nD=x=NaN;++m;break;case 11:b.font=v[1];b.textAlign=v[2];b.textBaseline=v[3];++m;break;case 12:a?E++:b.stroke();++m;break;default:++m}}C&&b.fill();E&&b.stroke()}gi.prototype.f=function(a,b,c,d,e){ji(this,a,b,c,d,e,this.a,void 0,void 0)};function ki(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}\r\nfunction li(a,b){a.Y[2]=a.a.length;a.Y=null;a.ca[2]=a.b.length;a.ca=null;var c=[6,b];a.a.push(c);a.b.push(c)}gi.prototype.tb=I;gi.prototype.Nb=function(){return this.P};function mi(a,b,c,d){gi.call(this,a,b,c,d);this.j=this.N=null;this.M=this.D=this.B=this.u=this.v=this.s=this.K=this.C=this.i=this.l=this.c=void 0}B(mi,gi);\r\nmi.prototype.cb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};\r\nmi.prototype.bb=function(a,b){if(this.j){ii(this,b);var c=a.o,d=this.coordinates.length,c=hi(this,c,0,c.length,a.A,!1);this.a.push([4,d,c,this.j,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);this.b.push([4,d,c,this.N,this.c,this.l,this.i,this.C,this.K,this.s,this.v,this.u,this.B,this.D,this.M]);li(this,b)}};mi.prototype.tb=function(){ki(this);this.l=this.c=void 0;this.j=this.N=null;this.M=this.D=this.u=this.v=this.s=this.K=this.C=this.B=this.i=void 0};\r\nmi.prototype.Ma=function(a){var b=a.eb(),c=a.Ka(),d=a.ub(1),e=a.Z(1),f=a.pa();this.c=b[0];this.l=b[1];this.N=d;this.j=e;this.i=c[1];this.C=a.C;this.K=f[0];this.s=f[1];this.v=a.K;this.u=a.s;this.B=a.v;this.D=a.B;this.M=c[0]};function ni(a,b,c,d){gi.call(this,a,b,c,d);this.c={ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,Ub:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(ni,gi);\r\nfunction oi(a,b,c,d,e){var f=a.coordinates.length;b=hi(a,b,c,d,e,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}n=ni.prototype;n.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nfunction pi(a){var b=a.c,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.ab==c&&b.Wa==d&&Ra(b.Xa,e)&&b.Ya==f&&b.Za==g&&b.$a==h||(b.Ub!=a.coordinates.length&&(a.a.push([12]),b.Ub=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.ab=c,b.Wa=d,b.Xa=e,b.Ya=f,b.Za=g,b.$a=h)}\r\nn.qc=function(a,b){var c=this.c,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(pi(this),ii(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.o,oi(this,c,0,c.length,a.A),this.b.push([12]),li(this,b))};\r\nn.rc=function(a,b){var c=this.c,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){pi(this);ii(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.ua,d=a.o,e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=oi(this,d,f,c[g],e);this.b.push([12]);li(this,b)}};n.tb=function(){this.c.Ub!=this.coordinates.length&&this.a.push([12]);ki(this);this.c=null};\r\nn.La=function(a,b){var c=b.a;this.c.strokeStyle=nd(c?c:mh);c=b.f;this.c.lineCap=void 0!==c?c:\"round\";c=b.b;this.c.lineDash=c?c:lh;c=b.g;this.c.lineJoin=void 0!==c?c:\"round\";c=b.c;this.c.lineWidth=void 0!==c?c:1;c=b.h;this.c.miterLimit=void 0!==c?c:10;this.c.lineWidth>this.h&&(this.h=this.c.lineWidth,this.g=null)};\r\nfunction qi(a,b,c,d){gi.call(this,a,b,c,d);this.c={oc:void 0,ab:void 0,Wa:void 0,Xa:null,Ya:void 0,Za:void 0,$a:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}B(qi,gi);\r\nfunction ri(a,b,c,d,e){var f=a.c,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length;if(!g&&!f)return d[h-1];var k=[1];a.a.push(k);a.b.push(k);for(k=0;k<h;++k){var l=d[k],m=a.coordinates.length;c=hi(a,b,c,l,e,!0);c=[8,m,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=l}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}n=qi.prototype;\r\nn.pc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.o,d=this.coordinates.length;hi(this,e,0,e.length,a.A,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));li(this,b)}};\r\nn.tc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d)si(this),ii(this,b),this.b.push([9,nd(kh)]),void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]),c=a.ja,d=sc(a),ri(this,d,0,c,a.A),li(this,b)};\r\nn.sc=function(a,b){var c=this.c,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){si(this);ii(this,b);this.b.push([9,nd(kh)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.a,d=Ph(a),e=a.A,f=0,g,h;g=0;for(h=c.length;g<h;++g)f=ri(this,d,f,c[g],e);li(this,b)}};n.tb=function(){ki(this);this.c=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};\r\nn.Nb=function(){this.g||(this.g=gb(this.P),0<this.h&&fb(this.g,this.resolution*(this.h+1)/2,this.g));return this.g};\r\nn.La=function(a,b){var c=this.c;if(a){var d=a.b;c.fillStyle=qd(d?d:kh)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=nd(d?d:mh),d=b.f,c.lineCap=void 0!==d?d:\"round\",d=b.b,c.lineDash=d?d.slice():lh,d=b.g,c.lineJoin=void 0!==d?d:\"round\",d=b.c,c.lineWidth=void 0!==d?d:1,d=b.h,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.h&&(this.h=c.lineWidth,this.g=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};\r\nfunction si(a){var b=a.c,c=b.fillStyle,d=b.strokeStyle,e=b.lineCap,f=b.lineDash,g=b.lineJoin,h=b.lineWidth,k=b.miterLimit;void 0!==c&&b.oc!=c&&(a.a.push([9,c]),b.oc=b.fillStyle);void 0===d||b.ab==d&&b.Wa==e&&b.Xa==f&&b.Ya==g&&b.Za==h&&b.$a==k||(a.a.push([10,d,h,e,g,k,f]),b.ab=d,b.Wa=e,b.Xa=f,b.Ya=g,b.Za=h,b.$a=k)}function ti(a,b,c,d){gi.call(this,a,b,c,d);this.M=this.D=this.B=null;this.j=\"\";this.K=this.C=0;this.s=void 0;this.u=this.v=0;this.i=this.l=this.c=null}B(ti,gi);\r\nfunction ui(a,b,c,d,e){if(\"\"!==a.j&&a.i&&(a.c||a.l)){if(a.c){var f=a.c,g=a.B;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.B={fillStyle:f.fillStyle}}}a.l&&(f=a.l,g=a.D,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=\r\nf.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.D={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.M;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.M=\r\n{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});ii(a,e);f=a.coordinates.length;b=hi(a,b,0,c,d,!1);b=[5,f,b,a.j,a.C,a.K,a.v,a.u,!!a.c,!!a.l,a.s];a.a.push(b);a.b.push(b);li(a,e)}}\r\nti.prototype.Ca=function(a){if(a){var b=a.f;b?(b=b.b,b=qd(b?b:kh),this.c?this.c.fillStyle=b:this.c={fillStyle:b}):this.c=null;var c=a.i;if(c){var b=c.a,d=c.f,e=c.b,f=c.g,g=c.c,c=c.h,d=void 0!==d?d:\"round\",e=e?e.slice():lh,f=void 0!==f?f:\"round\",g=void 0!==g?g:1,c=void 0!==c?c:10,b=nd(b?b:mh);if(this.l){var h=this.l;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.l={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.l=null;\r\nvar k=a.b,b=a.a,d=a.c,e=a.g,g=a.h,c=a.l,f=a.j,h=a.C,l=a.K;a=void 0!==k?k:\"10px sans-serif\";h=void 0!==h?h:\"center\";l=void 0!==l?l:\"middle\";this.i?(k=this.i,k.font=a,k.textAlign=h,k.textBaseline=l):this.i={font:a,textAlign:h,textBaseline:l};this.j=void 0!==f?f:\"\";this.C=void 0!==b?b:0;this.K=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.v=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=\"\"};function vi(a,b,c,d,e){this.K=a;this.g=b;this.j=d;this.C=c;this.h=e;this.a={};this.l=Md(1,1);this.i=Cf()}B(vi,ei);\r\nfunction wi(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].tb()}}vi.prototype.fa=function(a,b,c,d,e){var f=Lf(this.i,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.l;g.clearRect(0,0,1,1);var h;void 0!==this.h&&(h=db(),eb(h,a),fb(h,b*this.h,h));return xi(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};\r\nvi.prototype.b=function(a,b){var c=void 0!==a?a.toString():\"0\",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new yi[b](this.K,this.g,this.C,this.j),d[b]=c);return c};vi.prototype.c=function(){return sa(this.a)};\r\nvi.prototype.f=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ma);var h=this.g,k=h[0],l=h[1],m=h[2],h=h[3],k=[k,l,k,h,m,h,m,l];Xb(k,0,8,2,c,k);a.save();a.beginPath();a.moveTo(k[0],k[1]);a.lineTo(k[2],k[3]);a.lineTo(k[4],k[5]);a.lineTo(k[6],k[7]);a.clip();f=f?f:fi;for(var p,q,k=0,l=g.length;k<l;++k)for(p=this.a[g[k].toString()],m=0,h=f.length;m<h;++m)q=p[f[m]],void 0!==q&&q.f(a,b,c,d,e);a.restore()};\r\nfunction xi(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var k,l,m,p,q;k=0;for(l=h.length;k<l;++k)for(p=a.a[h[k].toString()],m=fi.length-1;0<=m;--m)if(q=p[fi[m]],void 0!==q&&(q=ji(q,b,1,c,d,e,q.b,f,g)))return q}var yi={Image:mi,LineString:ni,Polygon:qi,Text:ti};function zi(a,b){return J(a)-J(b)}function Ai(a,b){var c=.5*a/b;return c*c}function Bi(a,b,c,d,e,f){var g=!1,h,k;if(h=c.Z())k=h.ib(),2==k||3==k?h.bc(e,f):(0==k&&h.load(),h.Vb(e,f),g=!0);if(e=(0,c.c)(b))d=e.Rb(d),(0,Ci[d.$()])(a,d,c,b);return g}\r\nvar Ci={Point:function(a,b,c,d){var e=c.Z();if(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.cb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o,2,2,d)},LineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.qc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,Nh(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.tc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,tc(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=c.Z();\r\nif(e){if(2!=e.ib())return;var f=a.b(c.b,\"Image\");f.Ma(e);f.bb(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),c=b.o,ui(a,c,c.length,b.A,d)},MultiLineString:function(a,b,c,d){var e=c.f;if(e){var f=a.b(c.b,\"LineString\");f.La(null,e);f.rc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Oh(b),ui(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.g,f=c.f;if(f||e){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.sc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),b=Qh(b),ui(a,b,b.length,2,d)},GeometryCollection:function(a,b,c,d){b=\r\nb.a;var e,f;e=0;for(f=b.length;e<f;++e)(0,Ci[b[e].$()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.g,f=c.f;if(e||f){var g=a.b(c.b,\"Polygon\");g.La(e,f);g.pc(b,d)}if(e=c.a)a=a.b(c.b,\"Text\"),a.Ca(e),ui(a,b.o.slice(0,b.A),2,2,d)}};var Di,Ei=K,Fi=-1<Ei.navigator.userAgent.indexOf(\"OPR\"),Gi=-1<Ei.navigator.userAgent.indexOf(\"Edge\");Di=!(!Ei.navigator.userAgent.match(\"CriOS\")&&null!==Ei.chrome&&void 0!==Ei.chrome&&\"Google Inc.\"===Ei.navigator.vendor&&0==Fi&&0==Gi);function Hi(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}\r\nfunction Ii(a,b,c,d,e,f,g,h,k,l,m){var p=Md(Math.round(c*a),Math.round(c*b));if(0===k.length)return p.canvas;p.scale(c,c);var q=db();k.forEach(function(a){mb(q,a.extent)});var u=Md(Math.round(c*qb(q)/d),Math.round(c*rb(q)/d)),w=c/d;k.forEach(function(a){u.drawImage(a.image,l,l,a.image.width-2*l,a.image.height-2*l,(a.extent[0]-q[0])*w,-(a.extent[3]-q[3])*w,qb(a.extent)*w,rb(a.extent)*w)});var r=xb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],k=b[2][0],l=b[2][1];a=(e[0][0]-\r\nr[0])/f;var m=-(e[0][1]-r[1])/f,w=(e[1][0]-r[0])/f,A=-(e[1][1]-r[1])/f,F=(e[2][0]-r[0])/f,Q=-(e[2][1]-r[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,k=k-e,l=l-b;a:{g=[[g,h,0,0,w-a],[k,l,0,0,F-a],[0,0,g,h,A-m],[0,0,k,l,Q-m]];h=g.length;for(k=0;k<h;k++){for(var l=k,N=Math.abs(g[k][k]),O=k+1;O<h;O++){var S=Math.abs(g[O][k]);S>N&&(N=S,l=O)}if(0===N){g=null;break a}N=g[l];g[l]=g[k];g[k]=N;for(l=k+1;l<h;l++)for(N=-g[l][k]/g[k][k],O=k;O<h+1;O++)g[l][O]=k==O?0:g[l][O]+N*g[k][O]}k=Array(h);for(l=h-1;0<=l;l--)for(k[l]=\r\ng[l][h]/g[l][l],N=l-1;0<=N;N--)g[N][h]-=g[N][l]*k[l];g=k}g&&(p.save(),p.beginPath(),Di?(k=(a+w+F)/3,l=(m+A+Q)/3,h=Hi(k,l,a,m),w=Hi(k,l,w,A),F=Hi(k,l,F,Q),p.moveTo(w[0],w[1]),p.lineTo(h[0],h[1]),p.lineTo(F[0],F[1])):(p.moveTo(w,A),p.lineTo(a,m),p.lineTo(F,Q)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,m),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(u.canvas,0,0),p.restore())});m&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,h.f.forEach(function(a){var b=a.target;a=(b[0][0]-r[0])/f;var c=\r\n-(b[0][1]-r[1])/f,d=(b[1][0]-r[0])/f,e=-(b[1][1]-r[1])/f,g=(b[2][0]-r[0])/f,b=-(b[2][1]-r[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Ji(a,b,c,d,e){this.c=a;this.g=b;var f={},g=Ub(this.g,this.c);this.a=function(a){var b=a[0]+\"/\"+a[1];f[b]||(f[b]=g(a));return f[b]};this.h=d;this.C=e*e;this.f=[];this.i=!1;this.j=this.c.b&&!!d&&!!this.c.G()&&qb(d)==qb(this.c.G());this.b=this.c.G()?qb(this.c.G()):null;this.l=this.g.G()?qb(this.g.G()):null;a=xb(c);b=[c[2],c[3]];d=[c[2],c[1]];c=sb(c);e=this.a(a);var h=this.a(b),k=this.a(d),l=this.a(c);Ki(this,a,b,d,c,e,h,k,l,10);if(this.i){var m=Infinity;this.f.forEach(function(a){m=Math.min(m,\r\na.source[0][0],a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-m>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-m>this.b/2&&(b[0][0]-=this.b);b[1][0]-m>this.b/2&&(b[1][0]-=this.b);b[2][0]-m>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}\r\nfunction Ki(a,b,c,d,e,f,g,h,k,l){var m=cb([f,g,h,k]),p=a.b?qb(m)/a.b:null,q=a.b,u=a.c.b&&.5<p&&1>p,w=!1;if(0<l){if(a.g.c&&a.l)var r=cb([b,c,d,e]),w=w|.25<qb(r)/a.l;!u&&a.c.c&&p&&(w|=.25<p)}if(w||!a.h||wb(m,a.h)){if(!(w||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])))if(0<l)w=!0;else return;if(0<l&&(w||(m=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=u?(la(f[0],q)+la(h[0],q))/2-la(m[0],q):(f[0]+h[0])/2-m[0],m=(f[1]+h[1])/2-m[1],\r\nw=q*q+m*m>a.C),w)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(u=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(u),m=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(m),Ki(a,b,c,u,m,f,g,q,p,l-1),Ki(a,m,u,d,e,p,q,h,k,l-1)):(u=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(u),m=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(m),Ki(a,b,u,m,e,f,q,p,k,l-1),Ki(a,u,c,d,m,q,g,h,p,l-1));return}if(u){if(!a.j)return;a.i=!0}a.f.push({source:[f,h,k],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}\r\nfunction Li(a){var b=db();a.f.forEach(function(a){a=a.source;eb(b,a[0]);eb(b,a[1]);eb(b,a[2])});return b};function Mi(a){ai.call(this,a);this.f=Md();this.c=null;this.j=db();this.s=[0,0,0];this.h=Cf()}B(Mi,ai);\r\nMi.prototype.g=function(a,b,c){var d=di(this,a,0);ci(this,\"precompose\",c,a,d);var e=a.pixelRatio,f=a.viewState,g=f.center,h=f.projection,k=f.rotation,l=a.size,m=Math.round(e*l[0]/2),l=Math.round(e*l[1]/2),f=e/f.resolution,p=this.a,q=p.da(),u=e*q.nb(h),w=q.sa(h),p=Ha(p,\"render\"),r=c,x=1,D,t,z;if(k||p){r=this.f;D=r.canvas;var x=q.pb(e)/e,C=c.canvas.width*x;t=c.canvas.height*x;z=Math.round(Math.sqrt(C*C+t*t));D.width!=z?D.width=D.height=z:r.clearRect(0,0,z,z);D=(z-C)/2/x;t=(z-t)/2/x;f*=x;m=Math.round(x*\r\n(m+D));l=Math.round(x*(l+t))}C=r.globalAlpha;r.globalAlpha=b.opacity;var E=this.c,v,H=q.Qb(h)&&1==b.opacity;H||(E.reverse(),v=[]);var G=b.extent;if(b=void 0!==G){var A=xb(G),F=[G[2],G[3]],Q=[G[2],G[1]],G=sb(G);Hf(a.coordinateToPixelTransform,A);Hf(a.coordinateToPixelTransform,F);Hf(a.coordinateToPixelTransform,Q);Hf(a.coordinateToPixelTransform,G);var N=D||0,O=t||0;r.save();var S=r.canvas.width/2,X=r.canvas.height/2;nh(r,-k,S,X);r.beginPath();r.moveTo(x*(A[0]*e+N),x*(A[1]*e+O));r.lineTo(x*(F[0]*e+\r\nN),x*(F[1]*e+O));r.lineTo(x*(Q[0]*e+N),x*(Q[1]*e+O));r.lineTo(x*(G[0]*e+N),x*(G[1]*e+O));r.clip();nh(r,k,S,X)}A=0;for(F=E.length;A<F;++A){var Q=E[A],G=Q.V,X=Qc(w,G,this.j),S=G[0],P=sb(Qc(w,Yc(w,g,S,this.s))),G=Math.round(qb(X)*f),N=Math.round(rb(X)*f),O=Math.round((X[0]-P[0])*f/G)*G+m+Math.round((P[0]-g[0])*f),X=Math.round((P[1]-X[3])*f/N)*N+l+Math.round((g[1]-P[1])*f);if(!H){P=[O,X,O+G,X+N];r.save();for(var Ba=0,Nb=v.length;Ba<Nb;++Ba){var Ca=v[Ba];wb(P,Ca)&&(r.beginPath(),r.moveTo(P[0],P[1]),r.lineTo(P[0],\r\nP[3]),r.lineTo(P[2],P[3]),r.lineTo(P[2],P[1]),r.moveTo(Ca[0],Ca[1]),r.lineTo(Ca[2],Ca[1]),r.lineTo(Ca[2],Ca[3]),r.lineTo(Ca[0],Ca[3]),r.closePath(),r.clip())}v.push(P)}S=Ni(q,S,e,h);r.drawImage(Q.Z(),u,u,S[0],S[1],O,X,G,N);H||r.restore()}b&&r.restore();p&&(e=D-m/x+m,h=t-l/x+l,g=Lf(this.h,z/2-e,z/2-h,f,-f,-k,-g[0]+e/f,-g[1]-h/f),ci(this,\"render\",r,a,g));(k||p)&&c.drawImage(r.canvas,-Math.round(D),-Math.round(t),z/x,z/x);r.globalAlpha=C;ci(this,\"postcompose\",c,a,d)};\r\nMi.prototype.i=function(a,b){function c(a){a=a.T();return 2==a||4==a||3==a&&!u}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.da(),k=h.sa(f),l=Xc(k,e.resolution,0),m=k.O(l),p=e.center;m==e.resolution?(p=Yh(p,m,a.size),e=ub(p,m,e.rotation,a.size)):e=a.extent;void 0!==b.extent&&(e=vb(e,b.extent));if(pb(e))return!1;m=Tc(k,e,m);p={};p[l]={};var q=this.l(h,f,p),u=jh(g),w=db(),r=new Gc(0,0,0,0),x,D,t,z;for(t=m.H;t<=m.I;++t)for(z=m.J;z<=m.L;++z)x=$h(h,l,t,z,d,f),!c(x)&&x.b&&(x=x.b),c(x)?p[l][x.V.toString()]=\r\nx:(D=Pc(k,x.V,q,r,w),D||(x=Sc(k,x.V,r,w))&&q(l+1,x));q=Object.keys(p).map(Number);q.sort(Ma);var w=[],C,r=0;for(t=q.length;r<t;++r)for(C in x=q[r],z=p[x],z)x=z[C],2==x.T()&&w.push(x);this.c=w;Xh(a.usedTiles,h,l,m);Zh(a,h,k,d,f,e,l,g.get(\"preload\"));Uh(a,h);Wh(a,h);return!0};function Oi(a){ai.call(this,a);this.c=!1;this.B=-1;this.u=NaN;this.j=db();this.f=this.s=null;this.h=Md()}B(Oi,ai);\r\nOi.prototype.g=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.hb?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,k=h.G(),l=this.a.da(),m=di(this,a,0);ci(this,\"precompose\",c,a,m);var p=b.extent,q=void 0!==p;q&&bi(c,a,p);if((p=this.f)&&!p.c()){var u=0,w=0,r;if(Ha(this.a,\"render\")){r=c.canvas.width;var x=c.canvas.height;if(g){var D=Math.round(Math.sqrt(r*r+x*x)),u=(D-r)/2,w=(D-x)/2;r=x=D}this.h.canvas.width=r;this.h.canvas.height=x;r=this.h}else r=c;x=r.globalAlpha;r.globalAlpha=\r\nb.opacity;r!=c&&r.translate(u,w);b=a.size[0]*e;D=a.size[1]*e;nh(r,-g,b/2,D/2);p.f(r,e,m,g,f);if(l.i&&h.b&&!hb(k,d)){for(var h=d[0],l=qb(k),t=0;h<k[0];)--t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h+=l;t=0;for(h=d[2];h>k[2];)++t,m=l*t,m=di(this,a,m),p.f(r,e,m,g,f),h-=l;m=di(this,a,0)}nh(r,g,b/2,D/2);r!=c&&(ci(this,\"render\",r,a,m),c.drawImage(r.canvas,-u,-w),r.translate(-u,-w));r.globalAlpha=x}q&&c.restore();ci(this,\"postcompose\",c,a,m)};\r\nOi.prototype.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};Oi.prototype.D=function(){Th(this)};\r\nOi.prototype.i=function(a){function b(a){var b,d=a.f;d?b=d.call(a,l):(d=c.g)&&(b=d(a,l));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(q,a,b[e],Ai(l,m),this.D,this)||d;else d=Bi(q,a,b,Ai(l,m),this.D,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var k=a.extent,h=a.viewState,e=h.projection,l=h.resolution,m=a.pixelRatio,f=c.b,p=c.a,g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);k=fb(k,p*l);p=h.projection.G();d.i&&h.projection.b&&!hb(p,a.extent)&&(a=Math.max(qb(k)/2,qb(p)),k[0]=p[0]-a,k[2]=p[2]+a);if(!this.c&&this.u==l&&this.B==f&&this.s==g&&hb(this.j,k))return!0;this.f=null;this.c=!1;var q=new vi(.5*l/m,k,l,d.u,c.a);Pi(d,k,l,e);if(g){var u=[];Qi(d,k,function(a){u.push(a)},this);u.sort(g);u.forEach(b,this)}else Qi(d,k,b,this);wi(q);this.u=l;this.B=f;this.s=g;this.j=k;this.f=q;return!0};function Ri(a,b){Nf.call(this,0,b);this.f=Md();this.b=this.f.canvas;this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.h=Cf()}B(Ri,Nf);Ri.prototype.Mb=function(a){return a instanceof W?new Mi(a):a instanceof Y?new Oi(a):null};\r\nfunction Si(a,b,c){var d=a.g,e=a.f;if(Ha(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,k=c.viewState,l=c.pixelRatio/k.resolution;a=Lf(a.h,a.b.width/2,a.b.height/2,l,-l,-k.rotation,-k.center[0],-k.center[1]);U(d,new uf(b,new Gh(e,g,f,a,h),c,e,null))}}Ri.prototype.$=function(){return\"canvas\"};\r\nRi.prototype.vb=function(a){if(a){var b=this.f,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;Of(a);Si(this,\"precompose\",a);var f=a.layerStatesArray;Sa(f);nh(b,e,d/2,c/2);var g=a.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],l=m.layer,l=Qf(this,l),yf(m,g)&&\"ready\"==m.ac&&l.i(a,m)&&l.g(a,m,b);nh(b,-e,d/2,c/2);Si(this,\"postcompose\",a);this.a||(this.b.style.display=\r\n\"\",this.a=!0);Rf(this,a);a.postRenderFunctions.push(Pf)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function Ti(a,b){Rh.call(this,a);this.target=b}B(Ti,Rh);Ti.prototype.Jb=I;Ti.prototype.Gc=I;function Ui(a){var b=document.createElement(\"DIV\");b.style.position=\"absolute\";Ti.call(this,a,b);this.f=!0;this.h=1;this.g=0;this.c={}}B(Ui,Ti);Ui.prototype.Jb=function(){for(var a=this.target;a.lastChild;)a.removeChild(a.lastChild);this.g=0};\r\nUi.prototype.Hc=function(a,b){if(!b.visible)return this.f&&(this.target.style.display=\"none\",this.f=!1),!0;var c=a.pixelRatio,d=a.viewState,e=d.projection,f=this.a,g=f.da(),h=g.sa(e),k=c*g.nb(e),l=Xc(h,d.resolution),m=h.O(l),p=d.center,q;m==d.resolution?(p=Yh(p,m,a.size),q=ub(p,m,d.rotation,a.size)):q=a.extent;void 0!==b.extent&&(q=vb(q,b.extent));var m=Tc(h,q,m),u={};u[l]={};var w=this.l(g,e,u),r=jh(f),x=db(),D=new Gc(0,0,0,0),t,z,C,E;for(C=m.H;C<=m.I;++C)for(E=m.J;E<=m.L;++E)t=$h(g,l,C,E,c,e),z=\r\nt.T(),z=2==z||4==z||3==z&&!r,!z&&t.b&&(t=t.b),z=t.T(),2==z?u[l][t.V.toString()]=t:4==z||3==z&&!r||(z=Pc(h,t.V,w,D,x),z||(t=Sc(h,t.V,D,x))&&w(l+1,t));var v;if(this.g!=g.b){for(v in this.c)r=this.c[+v],Sd(r.target);this.c={};this.g=g.b}x=Object.keys(u).map(Number);x.sort(Ma);var w={},H;C=0;for(E=x.length;C<E;++C){v=x[C];v in this.c?r=this.c[v]:(r=Yc(h,p,v),r=new Vi(h,r),w[v]=!0,this.c[v]=r);v=u[v];for(H in v){t=r;z=v[H];var G=k,A=z.V,F=A[0],Q=A[1],N=A[2],A=A.toString();if(!(A in t.a)){var F=Lc(Wc(t.g,\r\nF),t.i),O=z.Z(t),S=O.style;S.maxWidth=\"none\";var X,P;0<G?(X=document.createElement(\"DIV\"),P=X.style,P.overflow=\"hidden\",P.width=F[0]+\"px\",P.height=F[1]+\"px\",S.position=\"absolute\",S.left=-G+\"px\",S.top=-G+\"px\",S.width=F[0]+2*G+\"px\",S.height=F[1]+2*G+\"px\",X.appendChild(O)):(S.width=F[0]+\"px\",S.height=F[1]+\"px\",X=O,P=S);P.position=\"absolute\";P.left=(Q-t.c[1])*F[0]+\"px\";P.top=(t.c[2]-N)*F[1]+\"px\";t.b||(t.b=document.createDocumentFragment());t.b.appendChild(X);t.a[A]=z}}r.b&&(r.target.appendChild(r.b),\r\nr.b=null)}k=Object.keys(this.c).map(Number);k.sort(Ma);C=Cf();H=0;for(x=k.length;H<x;++H)if(v=k[H],r=this.c[v],v in u)if(t=r.O(),E=r.pa(),Lf(C,a.size[0]/2,a.size[1]/2,t/d.resolution,t/d.resolution,d.rotation,(E[0]-p[0])/t,(p[1]-E[1])/t),r.setTransform(C),v in w){for(--v;0<=v;--v)if(v in this.c){this.c[v].target.parentNode&&this.c[v].target.parentNode.insertBefore(r.target,this.c[v].target.nextSibling);break}0>v&&this.target.insertBefore(r.target,this.target.childNodes[0]||null)}else{if(!a.viewHints[0]&&\r\n!a.viewHints[1]){z=Rc(r.g,q,r.c[0],D);v=[];t=void 0;for(t in r.a)E=r.a[t],G=E.V,Hc(z,G[1],G[2])||v.push(E);z=0;for(G=v.length;z<G;++z)E=v[z],t=E.V.toString(),Sd(E.Z(r)),delete r.a[t]}}else Sd(r.target),delete this.c[v];b.opacity!=this.h&&(this.h=this.target.style.opacity=b.opacity);b.visible&&!this.f&&(this.target.style.display=\"\",this.f=!0);Xh(a.usedTiles,g,l,m);Zh(a,g,h,c,e,q,l,f.get(\"preload\"));Uh(a,g);Wh(a,g);return!0};\r\nfunction Vi(a,b){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=a;this.c=b;this.h=xb(Qc(a,b));this.l=a.O(b[0]);this.a={};this.b=null;this.f=Cf();this.i=[0,0]}Vi.prototype.pa=function(){return this.h};Vi.prototype.O=function(){return this.l};Vi.prototype.setTransform=function(a){Ra(a,this.f)||(Qd(this.target,a),Gf(this.f,a))};function Wi(a){this.g=Md();var b=this.g.canvas;b.style.maxWidth=\"none\";b.style.position=\"absolute\";Ti.call(this,a,b);this.c=!1;this.h=-1;this.s=NaN;this.i=db();this.f=this.j=null;this.B=Cf();this.u=Cf()}B(Wi,Ti);n=Wi.prototype;n.Jb=function(){var a=this.g.canvas;a.width=a.width;this.h=0};\r\nn.Gc=function(a,b){var c=a.viewState,d=c.center,e=c.rotation,f=c.resolution,c=a.pixelRatio,g=a.size[0],h=a.size[1],k=g*c,l=h*c,d=Lf(this.B,c*g/2,c*h/2,c/f,-c/f,-e,-d[0],-d[1]),f=this.g;f.canvas.width=k;f.canvas.height=l;var m=Df(this.u);Jf(m,1/c,1/c);Kf(m,-(k-g)/2*c,-(l-h)/2*c);Qd(f.canvas,m);Xi(this,\"precompose\",a,d);(g=this.f)&&!g.c()&&(f.globalAlpha=b.opacity,g.f(f,c,d,e,b.hb?a.skippedFeatureUids:{}),Xi(this,\"render\",a,d));Xi(this,\"postcompose\",a,d)};\r\nfunction Xi(a,b,c,d){var e=a.g;a=a.a;Ha(a,b)&&U(a,new uf(b,new Gh(e,c.pixelRatio,c.extent,d,c.viewState.rotation),c,e,null))}n.fa=function(a,b,c,d){if(this.f){var e=this.a,f={};return this.f.fa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=J(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};n.Ic=function(){Th(this)};\r\nn.Hc=function(a){function b(a){var b,d=a.f;d?b=d.call(a,k):(d=c.g)&&(b=d(a,k));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Bi(m,a,b[e],Ai(k,l),this.Ic,this)||d;else d=Bi(m,a,b,Ai(k,l),this.Ic,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.da();Vh(a.attributions,d.h);Wh(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.i,h=c.j;if(!this.c&&!g&&e||!h&&f)return!0;var f=a.extent,g=a.viewState,e=g.projection,k=g.resolution,l=a.pixelRatio;a=c.b;h=c.a;g=c.get(\"renderOrder\");\r\nvoid 0===g&&(g=zi);f=fb(f,h*k);if(!this.c&&this.s==k&&this.h==a&&this.j==g&&hb(this.i,f))return!0;this.f=null;this.c=!1;var m=new vi(.5*k/l,f,k,d.u,c.a);Pi(d,f,k,e);if(g){var p=[];Qi(d,f,function(a){p.push(a)},this);p.sort(g);p.forEach(b,this)}else Qi(d,f,b,this);wi(m);this.s=k;this.h=a;this.j=g;this.i=f;this.f=m;return!0};function Yi(a,b){Nf.call(this,0,b);this.f=Md();var c=this.f.canvas;c.style.position=\"absolute\";c.style.width=\"100%\";c.style.height=\"100%\";c.className=\"ol-unselectable\";a.insertBefore(c,a.childNodes[0]||null);this.h=Cf();this.b=document.createElement(\"DIV\");this.b.className=\"ol-unselectable\";c=this.b.style;c.position=\"absolute\";c.width=\"100%\";c.height=\"100%\";R(this.b,\"touchstart\",Fa);a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0}B(Yi,Nf);Yi.prototype.R=function(){Sd(this.b);Nf.prototype.R.call(this)};\r\nYi.prototype.Mb=function(a){if(a instanceof W)a=new Ui(a);else if(a instanceof Y)a=new Wi(a);else return null;return a};function Zi(a,b,c){var d=a.g;if(Ha(d,b)){var e=c.extent,f=c.pixelRatio,g=c.viewState,h=g.rotation,k=a.f,l=k.canvas;a=Lf(a.h,l.width/2,l.height/2,f/g.resolution,-f/g.resolution,-h,-g.center[0],-g.center[1]);U(d,new uf(b,new Gh(k,f,e,a,h),c,k,null))}}Yi.prototype.$=function(){return\"dom\"};\r\nYi.prototype.vb=function(a){if(a){var b=this.g;if(Ha(b,\"precompose\")||Ha(b,\"postcompose\")){var b=this.f.canvas,c=a.pixelRatio;b.width=a.size[0]*c;b.height=a.size[1]*c}Zi(this,\"precompose\",a);b=a.layerStatesArray;Sa(b);var c=a.viewState.resolution,d,e,f,g;d=0;for(e=b.length;d<e;++d)g=b[d],f=g.layer,f=Qf(this,f),this.b.insertBefore(f.target,this.b.childNodes[d]||null),yf(g,c)&&\"ready\"==g.ac?f.Hc(a,g)&&f.Gc(a,g):f.Jb();var b=a.layerStates,h;for(h in this.c)h in b||(f=this.c[h],Sd(f.target));this.a||\r\n(this.b.style.display=\"\",this.a=!0);Of(a);Rf(this,a);a.postRenderFunctions.push(Pf);Zi(this,\"postcompose\",a)}else this.a&&(this.b.style.display=\"none\",this.a=!1)};function $i(a){this.b=a};function aj(a){this.b=a}B(aj,$i);aj.prototype.$=function(){return 35632};function bj(a){this.b=a}B(bj,$i);bj.prototype.$=function(){return 35633};function cj(){this.b=\"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;}\"}B(cj,aj);var dj=new cj;\r\nfunction ej(){this.b=\"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;}\"}B(ej,bj);var fj=new ej;\r\nfunction gj(a,b){this.i=a.getUniformLocation(b,\"j\");this.j=a.getUniformLocation(b,\"i\");this.h=a.getUniformLocation(b,\"k\");this.l=a.getUniformLocation(b,\"h\");this.b=a.getAttribLocation(b,\"e\");this.a=a.getAttribLocation(b,\"f\");this.f=a.getAttribLocation(b,\"c\");this.c=a.getAttribLocation(b,\"g\");this.g=a.getAttribLocation(b,\"d\")};function hj(a){this.b=void 0!==a?a:[];this.a=ij}var ij=35044;function jj(a,b){this.C=a;this.b=b;this.a={};this.g={};this.f={};this.i=this.j=this.h=this.l=null;(this.c=0<=fa.indexOf(\"OES_element_index_uint\"))&&b.getExtension(\"OES_element_index_uint\");R(this.C,\"webglcontextlost\",this.K,this);R(this.C,\"webglcontextrestored\",this.s,this)}B(jj,Aa);\r\nfunction kj(a,b,c){var d=a.b,e=c.b,f=String(J(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.c?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={Qe:c,buffer:g}}}function lj(a,b){var c=a.b,d=String(J(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}\r\njj.prototype.R=function(){za(this.C);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.g)a.deleteShader(this.g[b]);a.deleteFramebuffer(this.h);a.deleteRenderbuffer(this.i);a.deleteTexture(this.j)}};\r\nfunction mj(a){if(!a.h){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=nj(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.h=c;\r\na.j=d;a.i=e}return a.h}function oj(a,b){var c=String(J(b));if(c in a.g)return a.g[c];var d=a.b,e=d.createShader(b.$());d.shaderSource(e,b.b);d.compileShader(e);return a.g[c]=e}function pj(a,b,c){var d=J(b)+\"/\"+J(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,oj(a,b));e.attachShader(f,oj(a,c));e.linkProgram(f);return a.f[d]=f}jj.prototype.K=function(){qa(this.a);qa(this.g);qa(this.f);this.i=this.j=this.h=this.l=null};jj.prototype.s=function(){};\r\nfunction qj(a,b){if(b==a.l)return!1;a.b.useProgram(b);a.l=b;return!0}function rj(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function nj(a,b,c){var d=rj(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d};function sj(a,b){this.B=this.u=void 0;this.C=tb(b);this.v=[];this.l=[];this.M=void 0;this.h=[];this.g=[];this.ca=this.Y=void 0;this.a=[];this.D=this.j=null;this.N=void 0;this.Ea=Cf();this.va=Cf();this.ha=this.P=void 0;this.wa=Cf();this.ra=Jd();this.ba=this.aa=this.W=void 0;this.na=[];this.i=[];this.b=[];this.s=null;this.c=[];this.K=[];this.ma=void 0}B(sj,Fh);\r\nfunction tj(a,b){var c=a.s,d=a.j,e=a.na,f=a.i,g=b.b;return function(){if(!g.isContextLost()){var a,k;a=0;for(k=e.length;a<k;++a)g.deleteTexture(e[a]);a=0;for(k=f.length;a<k;++a)g.deleteTexture(f[a])}lj(b,c);lj(b,d)}}\r\nfunction uj(a,b,c,d){var e=a.u,f=a.B,g=a.M,h=a.Y,k=a.ca,l=a.N,m=a.P,p=a.ha,q=a.W?1:0,u=a.aa,w=a.ba,r=a.ma,x=Math.cos(u),u=Math.sin(u),D=a.a.length,t=a.b.length,z,C,E,v,H,G;for(z=0;z<c;z+=d)H=b[z]-a.C[0],G=b[z+1]-a.C[1],C=t/8,E=-w*e,v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=-w*(g-f),a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=(p+g)/h,a.b[t++]=l,a.b[t++]=q,E=w*(r-e),v=w*f,a.b[t++]=\r\nH,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=(m+r)/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,E=-w*e,v=w*f,a.b[t++]=H,a.b[t++]=G,a.b[t++]=E*x-v*u,a.b[t++]=E*u+v*x,a.b[t++]=m/k,a.b[t++]=p/h,a.b[t++]=l,a.b[t++]=q,a.a[D++]=C,a.a[D++]=C+1,a.a[D++]=C+2,a.a[D++]=C,a.a[D++]=C+2,a.a[D++]=C+3}sj.prototype.bb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};sj.prototype.cb=function(a,b){this.c.push(this.a.length);this.K.push(b);var c=a.o;uj(this,c,c.length,a.A)};\r\nfunction vj(a,b){var c=b.b;a.v.push(a.a.length);a.l.push(a.a.length);a.s=new hj(a.b);kj(b,34962,a.s);a.j=new hj(a.a);kj(b,34963,a.j);var d={};wj(a.na,a.h,d,c);wj(a.i,a.g,d,c);a.u=void 0;a.B=void 0;a.M=void 0;a.h=null;a.g=null;a.Y=void 0;a.ca=void 0;a.a=null;a.N=void 0;a.P=void 0;a.ha=void 0;a.W=void 0;a.aa=void 0;a.ba=void 0;a.b=null;a.ma=void 0}\r\nfunction wj(a,b,c,d){var e,f,g,h,k=b.length;for(h=0;h<k;++h){f=b[h];g=J(f).toString();if(g in c)e=c[g];else{e=d;var l=rj(e,33071,33071);e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,f);e=l;c[g]=e}a[h]=e}}\r\nsj.prototype.f=function(a,b,c,d,e,f,g,h,k,l,m){f=a.b;kj(a,34962,this.s);kj(a,34963,this.j);var p=pj(a,dj,fj),q;this.D?q=this.D:this.D=q=new gj(f,p);qj(a,p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,\r\n1,5126,!1,32,28);p=Df(this.wa);Jf(p,2/(c*e[0]),2/(c*e[1]));If(p,-d);Kf(p,-(b[0]-this.C[0]),-(b[1]-this.C[1]));b=Df(this.va);Jf(b,2/e[0],2/e[1]);e=Df(this.Ea);0!==d&&If(e,-d);f.uniformMatrix4fv(q.l,!1,Kd(this.ra,p));f.uniformMatrix4fv(q.j,!1,Kd(this.ra,b));f.uniformMatrix4fv(q.i,!1,Kd(this.ra,e));f.uniform1f(q.h,g);var u;if(void 0===k)xj(this,f,a,h,this.na,this.v);else{if(l)a:{d=a.c?5125:5123;a=a.c?4:2;e=this.c.length-1;for(g=this.i.length-1;0<=g;--g)for(f.bindTexture(3553,this.i[g]),l=0<g?this.l[g-\r\n1]:0,b=this.l[g];0<=e&&this.c[e]>=l;){u=this.c[e];c=this.K[e];p=J(c).toString();if(void 0===h[p]&&c.S()&&(void 0===m||wb(m,c.S().G()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-u,d,u*a),b=k(c))){h=b;break a}b=u;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),xj(this,f,a,h,this.i,this.l),h=(h=k(null))?h:void 0;u=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.g);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.c);\r\nreturn u};function xj(a,b,c,d,e,f){var g=c.c?5125:5123;c=c.c?4:2;if(sa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var k=f[a];b.drawElements(4,k-h,g,h*c);h=k}}else{h=0;var l,k=0;for(l=e.length;k<l;++k){b.bindTexture(3553,e[k]);for(var m=0<k?f[k-1]:0,p=f[k],q=m;h<a.c.length&&a.c[h]<=p;){var u=J(a.K[h]).toString();void 0!==d[u]?(q!==m&&b.drawElements(4,m-q,g,q*c),m=q=h===a.c.length-1?p:a.c[h+1]):m=h===a.c.length-1?p:a.c[h+1];h++}q!==m&&b.drawElements(4,m-q,g,q*c)}}}\r\nsj.prototype.Ma=function(a){var b=a.eb(),c=a.Z(1),d=a.Ob(),e=a.ub(1),f=a.C,g=a.pa(),h=a.K,k=a.s,l=a.Ka();a=a.v;var m;0===this.h.length?this.h.push(c):(m=this.h[this.h.length-1],J(m)!=J(c)&&(this.v.push(this.a.length),this.h.push(c)));0===this.g.length?this.g.push(e):(m=this.g[this.g.length-1],J(m)!=J(e)&&(this.l.push(this.a.length),this.g.push(e)));this.u=b[0];this.B=b[1];this.M=l[1];this.Y=d[1];this.ca=d[0];this.N=f;this.P=g[0];this.ha=g[1];this.aa=k;this.W=h;this.ba=a;this.ma=l[0]};\r\nfunction yj(a,b,c){this.h=b;this.l=a;this.g=c;this.a={}}B(yj,ei);function zj(a,b){var c=[],d;for(d in a.a)c.push(tj(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Aj(a,b){for(var c in a.a)vj(a.a[c],b)}yj.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Bj[b](this.l,this.h),this.a[b]=c);return c};yj.prototype.c=function(){return sa(this.a)};\r\nyj.prototype.f=function(a,b,c,d,e,f,g,h){var k,l,m;k=0;for(l=fi.length;k<l;++k)m=this.a[fi[k]],void 0!==m&&m.f(a,b,c,d,e,f,g,h,void 0,!1)};function Cj(a,b,c,d,e,f,g,h,k,l,m){var p=Dj,q,u;for(q=fi.length-1;0<=q;--q)if(u=a.a[fi[q]],void 0!==u&&(u=u.f(b,c,d,e,p,f,g,h,k,l,m)))return u}\r\nyj.prototype.fa=function(a,b,c,d,e,f,g,h,k,l){var m=b.b;m.bindFramebuffer(m.FRAMEBUFFER,mj(b));var p;void 0!==this.g&&(p=fb(kb(a),d*this.g));return Cj(this,b,a,d,e,g,h,k,function(a){var b=new Uint8Array(4);m.readPixels(0,0,1,1,m.RGBA,m.UNSIGNED_BYTE,b);if(0<b[3]&&(a=l(a)))return a},!0,p)};\r\nfunction Ej(a,b,c,d,e,f,g,h){var k=c.b;k.bindFramebuffer(k.FRAMEBUFFER,mj(c));return void 0!==Cj(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Bj={Image:sj},Dj=[1,1];function Fj(a,b,c,d,e,f,g){this.b=a;this.c=b;this.f=f;this.g=g;this.i=e;this.l=d;this.h=c;this.a=null}B(Fj,Fh);Fj.prototype.cb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.cb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};Fj.prototype.bb=function(a,b){var c=this.b,d=(new yj(1,this.f)).b(0,\"Image\");d.Ma(this.a);d.bb(a,b);vj(d,c);d.f(this.b,this.c,this.h,this.l,this.i,this.g,1,{},void 0,!1);tj(d,c)()};\r\nFj.prototype.Ma=function(a){this.a=a};function Gj(){this.b=\"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;}\"}B(Gj,aj);var Hj=new Gj;function Ij(){this.b=\"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;}\"}B(Ij,bj);var Jj=new Ij;\r\nfunction Kj(a,b){this.c=a.getUniformLocation(b,\"f\");this.f=a.getUniformLocation(b,\"e\");this.h=a.getUniformLocation(b,\"d\");this.g=a.getUniformLocation(b,\"g\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Lj(a,b){Rh.call(this,b);this.f=a;this.W=new hj([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.Da=null;this.j=void 0;this.P=Cf();this.aa=Cf();this.B=Jd();this.s=null}B(Lj,Rh);\r\nfunction Mj(a,b,c){var d=a.f.f;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.Da));b=nj(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.Da=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}\r\nLj.prototype.Jc=function(a,b,c){Nj(this,\"precompose\",c,a);kj(c,34962,this.W);var d=c.b,e=pj(c,Hj,Jj),f;this.s?f=this.s:this.s=f=new Kj(d,e);qj(c,e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.g,0));d.uniformMatrix4fv(f.h,!1,Kd(this.B,this.P));d.uniformMatrix4fv(f.f,!1,Kd(this.B,this.aa));d.uniform1f(f.c,b.opacity);d.bindTexture(3553,this.Da);d.drawArrays(5,0,4);Nj(this,\"postcompose\",\r\nc,a)};function Nj(a,b,c,d){a=a.a;if(Ha(a,b)){var e=d.viewState;U(a,new uf(b,new Fj(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}Lj.prototype.v=function(){this.i=this.Da=null;this.j=void 0};function Oj(){this.b=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}B(Oj,aj);var Pj=new Oj;function Qj(){this.b=\"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;}\"}B(Qj,bj);var Rj=new Qj;function Sj(a,b){this.c=a.getUniformLocation(b,\"e\");this.f=a.getUniformLocation(b,\"d\");this.b=a.getAttribLocation(b,\"b\");this.a=a.getAttribLocation(b,\"c\")};function Tj(a,b){Lj.call(this,a,b);this.M=Pj;this.ba=Rj;this.c=null;this.D=new hj([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.N=[0,0]}B(Tj,Lj);Tj.prototype.R=function(){lj(this.f.getContext(),this.D);Lj.prototype.R.call(this)};Tj.prototype.l=function(a,b,c){var d=this.f;return function(e,f){return Sh(a,b,e,f,function(a){var b=Uj(d.a,a.getKey());b&&(c[e]||(c[e]={}),c[e][a.V.toString()]=a);return b})}};Tj.prototype.v=function(){Lj.prototype.v.call(this);this.c=null};\r\nTj.prototype.Kc=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,k=h.da(),l=k.sa(g),m=Xc(l,f.resolution),p=l.O(m),q=Ni(k,m,a.pixelRatio,g),u=q[0]/Lc(Wc(l,m),this.N)[0],w=p/u,r=a.pixelRatio*k.nb(g),x=f.center,D;p==f.resolution?(x=Yh(x,p,a.size),D=ub(x,p,f.rotation,a.size)):D=a.extent;p=Tc(l,D,p);if(this.g&&Ic(this.g,p)&&this.h==k.b)w=this.u;else{var t=[p.I-p.H+1,p.L-p.J+1],z=ka(Math.max(t[0]*q[0],t[1]*q[1])),t=w*z,C=l.pa(m),E=C[0]+p.H*q[0]*w,w=C[1]+p.J*q[1]*w,w=[E,w,E+t,w+t];\r\nMj(this,a,z);e.viewport(0,0,z,z);e.clearColor(0,0,0,0);e.clear(16384);e.disable(3042);z=pj(c,this.M,this.ba);qj(c,z);this.c||(this.c=new Sj(e,z));kj(c,34962,this.D);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.c,0);c={};c[m]={};var v=this.l(k,g,c),H=jh(h),z=!0,E=db(),G=new Gc(0,0,0,0),A,F,Q;for(F=p.H;F<=p.I;++F)for(Q=p.J;Q<=p.L;++Q){C=$h(k,m,F,Q,u,g);if(void 0!==\r\nb.extent&&(A=Qc(l,C.V,E),!wb(A,b.extent)))continue;A=C.T();A=2==A||4==A||3==A&&!H;!A&&C.b&&(C=C.b);A=C.T();if(2==A){if(Uj(d.a,C.getKey())){c[m][C.V.toString()]=C;continue}}else if(4==A||3==A&&!H)continue;z=!1;A=Pc(l,C.V,v,G,E);A||(C=Sc(l,C.V,G,E))&&v(m+1,C)}b=Object.keys(c).map(Number);b.sort(Ma);for(var v=new Float32Array(4),N,H=0,G=b.length;H<G;++H)for(N in F=c[b[H]],F)C=F[N],A=Qc(l,C.V,E),v[0]=2*(A[2]-A[0])/t,v[1]=2*(A[3]-A[1])/t,v[2]=2*(A[0]-w[0])/t-1,v[3]=2*(A[1]-w[1])/t-1,e.uniform4fv(this.c.f,\r\nv),Vj(d,C,q,r*u),e.drawArrays(5,0,4);z?(this.g=p,this.u=w,this.h=k.b):(this.u=this.g=null,this.h=-1,a.animate=!0)}Xh(a.usedTiles,k,m,p);var O=d.l;Zh(a,k,l,u,g,D,m,h.get(\"preload\"),function(a){var b;(b=2!=a.T()||Uj(d.a,a.getKey()))||(b=a.getKey()in O.a);b||O.g([a,Vc(l,a.V),l.O(a.V[0]),q,r*u])},this);Uh(a,k);Wh(a,k);e=this.P;Df(e);Kf(e,(x[0]-w[0])/(w[2]-w[0]),(x[1]-w[1])/(w[3]-w[1]));0!==f.rotation&&If(e,f.rotation);Jf(e,a.size[0]*f.resolution/(w[2]-w[0]),a.size[1]*f.resolution/(w[3]-w[1]));Kf(e,-.5,\r\n-.5);return!0};function Wj(a,b){Lj.call(this,a,b);this.h=!1;this.N=-1;this.M=NaN;this.u=db();this.g=this.c=this.D=null}B(Wj,Lj);n=Wj.prototype;n.Jc=function(a,b,c){this.g=b;var d=a.viewState,e=this.c;e&&!e.c()&&e.f(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.hb?a.skippedFeatureUids:{})};n.R=function(){var a=this.c;if(a){var b=this.f.getContext();zj(a,b)();this.c=null}Lj.prototype.R.call(this)};\r\nn.fa=function(a,b,c,d){if(this.c&&this.g){var e=this.f.getContext(),f=b.viewState,g=this.a,h={};return this.c.fa(a,e,f.center,f.resolution,f.rotation,b.size,b.pixelRatio,this.g.opacity,{},function(a){var b=J(a).toString();if(!(b in h))return h[b]=!0,c.call(d,a,g)})}};n.Ec=function(a,b){if(this.c&&this.g){var c=this.f.getContext(),d=b.viewState;return Ej(this.c,a,c,d.resolution,d.rotation,b.pixelRatio,this.g.opacity,b.skippedFeatureUids)}return!1};n.Lc=function(){Th(this)};\r\nn.Kc=function(a,b,c){function d(a){var b,c=a.f;c?b=c.call(a,l):(c=e.g)&&(b=c(a,l));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Bi(q,a,b[d],Ai(l,m),this.Lc,this)||c;else c=Bi(q,a,b,Ai(l,m),this.Lc,this)||c;a=c}else a=!1;this.h=this.h||a}}var e=this.a;b=e.da();Vh(a.attributions,b.h);Wh(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.i,k=e.j;if(!this.h&&!h&&f||!k&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,l=h.resolution,m=a.pixelRatio,h=e.b,p=e.a,k=e.get(\"renderOrder\");\r\nvoid 0===k&&(k=zi);g=fb(g,p*l);if(!this.h&&this.M==l&&this.N==h&&this.D==k&&hb(this.u,g))return!0;this.c&&a.postRenderFunctions.push(zj(this.c,c));this.h=!1;var q=new yj(.5*l/m,g,e.a);Pi(b,g,l,f);if(k){var u=[];Qi(b,g,function(a){u.push(a)},this);u.sort(k);u.forEach(d,this)}else Qi(b,g,d,this);Aj(q,c);this.M=l;this.N=h;this.D=k;this.u=g;this.c=q;return!0};function Xj(){this.f=0;this.c={};this.a=this.b=null}Xj.prototype.clear=function(){this.f=0;this.c={};this.a=this.b=null};function Uj(a,b){return a.c.hasOwnProperty(b)}function Yj(a,b){for(var c=a.b;c;)b.call(void 0,c.Na,c.Ia,a),c=c.ta}Xj.prototype.get=function(a){a=this.c[a];L(void 0!==a,15);if(a===this.a)return a.Na;a===this.b?(this.b=this.b.ta,this.b.Ua=null):(a.ta.Ua=a.Ua,a.Ua.ta=a.ta);a.ta=null;a.Ua=this.a;this.a=this.a.ta=a;return a.Na};\r\nXj.prototype.pop=function(){var a=this.b;delete this.c[a.Ia];a.ta&&(a.ta.Ua=null);this.b=a.ta;this.b||(this.a=null);--this.f;return a.Na};function Zj(a,b,c){a.get(b);a.c[b].Na=c}Xj.prototype.set=function(a,b){L(!(a in this.c),16);var c={Ia:a,ta:null,Ua:this.a,Na:b};this.a?this.a.ta=c:this.b=c;this.a=c;this.c[a]=c;++this.f};function ak(a,b){Nf.call(this,0,b);this.b=document.createElement(\"CANVAS\");this.b.style.width=\"100%\";this.b.style.height=\"100%\";this.b.className=\"ol-unselectable\";a.insertBefore(this.b,a.childNodes[0]||null);this.s=this.v=0;this.u=Md();this.i=!0;this.f=ie(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.C=new jj(this.b,this.f);R(this.b,\"webglcontextlost\",this.ge,this);R(this.b,\"webglcontextrestored\",this.he,this);this.a=new Xj;this.K=null;this.l=\r\nnew Uf(function(a){var b=a[1];a=a[2];var e=b[0]-this.K[0],b=b[1]-this.K[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].getKey()});this.B=function(){if(0!==this.l.b.length){Yf(this.l);var a=Vf(this.l);Vj(this,a[0],a[3],a[4])}return!1}.bind(this);this.h=0;bk(this)}B(ak,Nf);\r\nfunction Vj(a,b,c,d){var e=a.f,f=b.getKey();if(Uj(a.a,f))a=a.a.get(f),e.bindTexture(3553,a.Da),9729!=a.yc&&(e.texParameteri(3553,10240,9729),a.yc=9729),9729!=a.zc&&(e.texParameteri(3553,10241,9729),a.zc=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.u.canvas,k=a.u;a.v!==c[0]||a.s!==c[1]?(h.width=c[0],h.height=c[1],a.v=c[0],a.s=c[1]):k.clearRect(0,0,c[0],c[1]);k.drawImage(b.Z(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,0,6408,\r\n6408,5121,b.Z());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{Da:g,yc:9729,zc:9729})}}n=ak.prototype;n.Mb=function(a){return a instanceof W?new Tj(this,a):a instanceof Y?new Wj(this,a):null};function ck(a,b,c){var d=a.g;if(Ha(d,b)){a=a.C;var e=c.viewState;U(d,new uf(b,new Fj(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}\r\nn.R=function(){var a=this.f;a.isContextLost()||Yj(this.a,function(b){b&&a.deleteTexture(b.Da)});Da(this.C);Nf.prototype.R.call(this)};n.ld=function(a,b){for(var c=this.f,d;1024<this.a.f-this.h;){if(d=this.a.b.Na)c.deleteTexture(d.Da);else if(+this.a.b.Ia==b.index)break;else--this.h;this.a.pop()}};n.getContext=function(){return this.C};n.$=function(){return\"webgl\"};n.ge=function(a){a.preventDefault();this.a.clear();this.h=0;a=this.c;for(var b in a)a[b].v()};n.he=function(){bk(this);this.g.render()};\r\nfunction bk(a){a=a.f;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}\r\nn.vb=function(a){var b=this.getContext(),c=this.f;if(c.isContextLost())return!1;if(!a)return this.i&&(this.b.style.display=\"none\",this.i=!1),!1;this.K=a.focus;this.a.set((-a.index).toString(),null);++this.h;ck(this,\"precompose\",a);var d=[],e=a.layerStatesArray;Sa(e);var f=a.viewState.resolution,g,h,k,l;g=0;for(h=e.length;g<h;++g)l=e[g],yf(l,f)&&\"ready\"==l.ac&&(k=Qf(this,l.layer),k.Kc(a,l,b)&&d.push(l));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=\r\ne,this.b.height=f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)l=d[g],k=Qf(this,l.layer),k.Jc(a,l,b);this.i||(this.b.style.display=\"\",this.i=!0);Of(a);1024<this.a.f-this.h&&a.postRenderFunctions.push(this.ld.bind(this));0!==this.l.b.length&&(a.postRenderFunctions.push(this.B),a.animate=!0);ck(this,\"postcompose\",a);Rf(this,a);a.postRenderFunctions.push(Pf)};\r\nn.fa=function(a,b,c,d,e,f){var g;if(this.f.isContextLost())return!1;var h=b.viewState,k=b.layerStatesArray,l;for(l=k.length-1;0<=l;--l){g=k[l];var m=g.layer;if(yf(g,h.resolution)&&e.call(f,m)&&(g=Qf(this,m).fa(a,b,c,d)))return g}};n.Fc=function(a,b,c,d){var e=!1;if(this.f.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var k=g[h],l=k.layer;if(yf(k,f.resolution)&&c.call(d,l)&&(e=Qf(this,l).Ec(a,b)))return!0}return e};var dk=[\"canvas\",\"webgl\",\"dom\"];\r\nfunction Z(a){V.call(this);var b=ek(a);this.kb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.Ab=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Cb=void 0!==a.pixelRatio?a.pixelRatio:oe;this.Bb=b.logos;this.aa=function(){this.g=void 0;this.ve.call(this,Date.now())}.bind(this);this.Fa=Cf();this.zb=Cf();this.Ga=0;this.c=null;this.va=db();this.u=this.P=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(re?\" ol-touch\":\"\");this.a.style.position=\r\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.s=document.createElement(\"DIV\");this.s.className=\"ol-overlaycontainer\";this.a.appendChild(this.s);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";a=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",of,\"mousewheel\",\"wheel\"];for(var c=0,d=a.length;c<d;++c)R(this.j,a[c],Ea);this.a.appendChild(this.j);\r\nthis.ma=new ff(this);for(var e in rf)R(this.ma,rf[e],this.wc,this);this.ba=b.keyboardEventTarget;this.i=null;R(this.a,\"wheel\",this.Sa,this);R(this.a,\"mousewheel\",this.Sa,this);this.v=b.controls;this.h=b.interactions;this.B=b.overlays;this.Sc={};this.N=new b.xe(this.a,this);this.W=null;this.D=[];this.na=[];this.wa=new Zf(this.qd.bind(this),this.Jd.bind(this));this.Eb={};R(this,La(\"layergroup\"),this.vd,this);R(this,La(\"view\"),this.Kd,this);R(this,La(\"size\"),this.Gd,this);R(this,La(\"target\"),this.Id,\r\nthis);this.l(b.values);ed(this.v,function(a){a.setMap(this)},this);R(this.v,hd,function(a){a.element.setMap(this)},this);R(this.v,id,function(a){a.element.setMap(null)},this);ed(this.h,function(a){a.setMap(this)},this);R(this.h,hd,function(a){a.element.setMap(this)},this);R(this.h,id,function(a){a.element.setMap(null)},this);ed(this.B,this.ic,this);R(this.B,hd,function(a){this.ic(a.element)},this);R(this.B,id,function(a){var b=a.element.Pa();void 0!==b&&delete this.Sc[b.toString()];a.element.setMap(null)},\r\nthis)}B(Z,V);n=Z.prototype;n.cd=function(a){this.v.push(a)};n.dd=function(a){this.h.push(a)};n.ed=function(a){fk(this).get(\"layers\").push(a)};n.fd=function(a){this.B.push(a)};n.ic=function(a){var b=a.Pa();void 0!==b&&(this.Sc[b.toString()]=a);a.setMap(this)};n.oa=function(a){this.render();Array.prototype.push.apply(this.D,arguments)};\r\nn.R=function(){Da(this.ma);Da(this.N);ya(this.a,\"wheel\",this.Sa,this);ya(this.a,\"mousewheel\",this.Sa,this);void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0);this.g&&(K.cancelAnimationFrame(this.g),this.g=void 0);this.set(\"target\",null);V.prototype.R.call(this)};n.od=function(a,b,c,d,e){if(this.c)return a=this.Ba(a),this.N.fa(a,this.c,b,void 0!==c?c:null,void 0!==d?d:yb,void 0!==e?e:null)};\r\nn.Md=function(a,b,c){if(!this.c)return!1;a=this.Ba(a);return this.N.Fc(a,this.c,void 0!==b?b:yb,void 0!==c?c:null)};n.uc=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};n.Wb=function(){return this.get(\"target\")};n.Ra=function(){var a=this.Wb();return void 0!==a?\"string\"===typeof a?document.getElementById(a):a:null};n.Ba=function(a){var b=this.c;return b?Hf(b.pixelToCoordinateTransform,a.slice()):null};\r\nfunction fk(a){return a.get(\"layergroup\")}function ug(a,b){var c=a.c;return c?Hf(c.coordinateToPixelTransform,b.slice(0,2)):null}n.Ta=function(){return this.get(\"size\")};n.U=function(){return this.get(\"view\")};n.qd=function(a,b,c,d){var e=this.c;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.getKey()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};n.Sa=function(a,b){var c=new df(b||a.type,this,a);this.wc(c)};\r\nn.wc=function(a){if(this.c){this.W=a.coordinate;a.frameState=this.c;var b=this.h.a,c;if(!1!==U(this,a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.get(\"active\")&&!d.handleEvent(a))break}}};\r\nn.Fd=function(){var a=this.c,b=this.wa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.kb?8:0,d=2);e[1]&&(c=this.Ab?8:0,d=2)}if(b.l<c){Yf(b);for(var e=0,f,g;b.l<c&&e<d&&0<b.b.length;)f=Vf(b)[0],g=f.getKey(),0!==f.T()||g in b.h||(b.h[g]=!0,++b.l,++e,f.load())}}b=this.na;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};n.Gd=function(){this.render()};\r\nn.Id=function(){var a;this.Wb()&&(a=this.Ra());if(this.i){for(var b=0,c=this.i.length;b<c;++b)M(this.i[b]);this.i=null}a?(a.appendChild(this.a),a=this.ba?this.ba:a,this.i=[R(a,\"keydown\",this.Sa,this),R(a,\"keypress\",this.Sa,this)],this.f||(this.f=this.yb.bind(this),K.addEventListener(\"resize\",this.f,!1))):(Sd(this.a),void 0!==this.f&&(K.removeEventListener(\"resize\",this.f,!1),this.f=void 0));this.yb()};n.Jd=function(){this.render()};n.Ld=function(){this.render()};\r\nn.Kd=function(){this.P&&(M(this.P),this.P=null);var a=this.U();a&&(this.P=R(a,\"propertychange\",this.Ld,this));this.render()};n.vd=function(){this.u&&(this.u.forEach(M),this.u=null);var a=fk(this);a&&(this.u=[R(a,\"propertychange\",this.render,this),R(a,\"change\",this.render,this)]);this.render()};n.we=function(){this.g&&K.cancelAnimationFrame(this.g);this.aa()};n.render=function(){void 0===this.g&&(this.g=K.requestAnimationFrame(this.aa))};n.se=function(a){return this.h.remove(a)};n.te=function(a){return fk(this).get(\"layers\").remove(a)};\r\nn.ve=function(a){var b,c,d,e=this.Ta(),f=this.U(),g=db(),h=null;if(b=void 0!==e&&0<e[0]&&0<e[1]&&f)b=!!f.qa()&&void 0!==f.O();if(b){d=this.c?this.c.viewHints:void 0;void 0!==d?(d[0]=f.c[0],d[1]=f.c[1],h=d):h=f.c.slice();var k=fk(this).Pb(),l={};b=0;for(c=k.length;b<c;++b)l[J(k[b].layer)]=k[b];d=f.T();h={animate:!1,attributions:{},coordinateToPixelTransform:this.Fa,extent:g,focus:this.W?this.W:d.center,index:this.Ga++,layerStates:l,layerStatesArray:k,logos:pa({},this.Bb),pixelRatio:this.Cb,pixelToCoordinateTransform:this.zb,\r\npostRenderFunctions:[],size:e,skippedFeatureUids:this.Eb,tileQueue:this.wa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.D;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=ub(d.center,d.resolution,d.rotation,h.size,g)}this.c=h;this.N.vb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.na,h.postRenderFunctions),0!==this.D.length||h.viewHints[0]||h.viewHints[1]||lb(h.extent,this.va)||(U(this,new Td(\"moveend\",this,h)),gb(h.extent,\r\nthis.va)));U(this,new Td(\"postrender\",this,h));d=g=this.Fd;this&&(d=ea(g,this));\"function\"!=ba()||aa.Window&&aa.Window.prototype&&!xd(\"Edge\")&&aa.Window.prototype.setImmediate==aa.setImmediate?(fe||(fe=ge()),fe(d)):aa.setImmediate(d)};\r\nn.yb=function(){var a=this.Ra();if(a){var b=K.getComputedStyle(a);this.set(\"size\",[a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.set(\"size\",void 0)};\r\nfunction ek(a){var b=null;void 0!==a.keyboardEventTarget&&(b=\"string\"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||\"boolean\"===typeof a.logo&&a.logo)d[\"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\"]=\r\n\"http://openlayers.org/\";else{var e=a.logo;\"string\"===typeof e?d[e]=\"\":e instanceof HTMLElement?d[J(e).toString()]=e:e&&(L(\"string\"==typeof e.href,44),L(\"string\"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof Xg?a.layers:new Xg({layers:a.layers});c.layergroup=e;c.target=a.target;c.view=void 0!==a.view?a.view:new uc;var e=Nf,f;void 0!==a.renderer?Array.isArray(a.renderer)?f=a.renderer:\"string\"===typeof a.renderer?f=[a.renderer]:L(!1,46):f=dk;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g];\r\nif(\"canvas\"==k){if(qe){e=Ri;break}}else if(\"dom\"==k){e=Yi;break}else if(\"webgl\"==k&&je){e=ak;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new cd(a.controls.slice()):(L(a.controls instanceof cd,47),f=a.controls):f=ee();if(void 0!==a.interactions)Array.isArray(a.interactions)?g=new cd(a.interactions.slice()):(L(a.interactions instanceof cd,48),g=a.interactions);else{g={};h=new cd;k=new $f;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new vg);(void 0!==g.doubleClickZoom?g.doubleClickZoom:\r\n1)&&h.push(new fg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new qg({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&h.push(new Pg);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new Tg({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Jg),h.push(new Lg({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Ng({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:\r\n1)&&h.push(new Ig({duration:g.zoomDuration}));g=h}void 0!==a.overlays?Array.isArray(a.overlays)?a=new cd(a.overlays.slice()):(L(a.overlays instanceof cd,49),a=a.overlays):a=new cd;return{controls:f,interactions:g,keyboardEventTarget:b,logos:d,overlays:a,xe:e,values:c}}Ib(bh);Ib(ih);ih.forEach(function(a){bh.forEach(function(b){Jb(a,b,ch);Jb(b,a,dh)})});function gk(a){V.call(this);this.j=a.id;this.i=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.c=document.createElement(\"DIV\");this.c.className=\"ol-overlay-container\";this.c.style.position=\"absolute\";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.g=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.h=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={lb:\"\",sb:\"\",wb:\"\",xb:\"\",visible:!0};this.f=null;R(this,La(\"element\"),this.td,this);R(this,La(\"map\"),\r\nthis.Ad,this);R(this,La(\"offset\"),this.Bd,this);R(this,La(\"position\"),this.Dd,this);R(this,La(\"positioning\"),this.Ed,this);void 0!==a.element&&this.set(\"element\",a.element);this.set(\"offset\",void 0!==a.offset?a.offset:[0,0]);this.set(\"positioning\",void 0!==a.positioning?a.positioning:\"top-left\");void 0!==a.position&&this.Ac(a.position)}B(gk,V);n=gk.prototype;n.Pa=function(){return this.j};n.td=function(){for(var a=this.c;a.lastChild;)a.removeChild(a.lastChild);(a=this.get(\"element\"))&&this.c.appendChild(a)};\r\nn.Ad=function(){this.f&&(Sd(this.c),M(this.f),this.f=null);var a=this.get(\"map\");a&&(this.f=R(a,\"postrender\",this.render,this),hk(this),a=this.s?a.j:a.s,this.i?a.insertBefore(this.c,a.childNodes[0]||null):a.appendChild(this.c))};n.render=function(){hk(this)};n.Bd=function(){hk(this)};\r\nn.Dd=function(){hk(this);if(void 0!==this.get(\"position\")&&this.autoPan){var a=this.get(\"map\");if(void 0!==a&&a.Ra()){var b=ik(a.Ra(),a.Ta()),c=this.get(\"element\"),d=c.offsetWidth,e=c.currentStyle||K.getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||K.getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=ik(c,[d,e]),c=this.h;hb(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&\r\n(b[0]=Math.abs(e)+c),0>f?b[1]=f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.U().qa(),d=ug(a,c),b=[d[0]+b[0],d[1]+b[1]],this.g&&(this.g.source=c,a.oa(Dc(this.g))),a.U().xa(a.Ba(b)))}}};n.Ed=function(){hk(this)};n.setMap=function(a){this.set(\"map\",a)};n.Ac=function(a){this.set(\"position\",a)};function ik(a,b){var c=a.getBoundingClientRect(),d=c.left+K.pageXOffset,c=c.top+K.pageYOffset;return[d,c,d+b[0],c+b[1]]}\r\nfunction jk(a,b){a.a.visible!==b&&(a.c.style.display=b?\"\":\"none\",a.a.visible=b)}\r\nfunction hk(a){var b=a.get(\"map\"),c=a.get(\"position\");if(void 0!==b&&b.c&&void 0!==c){var c=ug(b,c),d=b.Ta(),b=a.c.style,e=a.get(\"offset\"),f=a.get(\"positioning\"),g=e[0],e=e[1];if(\"bottom-right\"==f||\"center-right\"==f||\"top-right\"==f)\"\"!==a.a.sb&&(a.a.sb=b.left=\"\"),g=Math.round(d[0]-c[0]-g)+\"px\",a.a.wb!=g&&(a.a.wb=b.right=g);else{\"\"!==a.a.wb&&(a.a.wb=b.right=\"\");if(\"bottom-center\"==f||\"center-center\"==f||\"top-center\"==f)g-=a.c.offsetWidth/2;g=Math.round(c[0]+g)+\"px\";a.a.sb!=g&&(a.a.sb=b.left=g)}if(\"bottom-left\"==\r\nf||\"bottom-center\"==f||\"bottom-right\"==f)\"\"!==a.a.xb&&(a.a.xb=b.top=\"\"),c=Math.round(d[1]-c[1]-e)+\"px\",a.a.lb!=c&&(a.a.lb=b.bottom=c);else{\"\"!==a.a.lb&&(a.a.lb=b.bottom=\"\");if(\"center-left\"==f||\"center-center\"==f||\"center-right\"==f)e-=a.c.offsetHeight/2;c=Math.round(c[1]+e)+\"px\";a.a.xb!=c&&(a.a.xb=b.top=c)}jk(a,!0)}else jk(a,!1)};function kk(a){V.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.f=void 0;this.c=null;R(this,La(this.a),this.qb,this);void 0!==a&&(a instanceof Wb||!a?lk(this,a):this.l(a))}B(kk,V);n=kk.prototype;n.clone=function(){var a=new kk(this.Ea());mk(a,this.a);var b=this.S();b&&lk(a,b.clone());if(b=this.h)a.h=b,a.f=b?nk(b):void 0,a.w();return a};n.S=function(){return this.get(this.a)};n.Pa=function(){return this.g};n.ud=function(){this.w()};\r\nn.qb=function(){this.c&&(M(this.c),this.c=null);var a=this.S();a&&(this.c=R(a,\"change\",this.ud,this));this.w()};function lk(a,b){a.set(a.a,b)}function mk(a,b){ya(a,La(a.a),a.qb,a);a.a=b;R(a,La(a.a),a.qb,a);a.qb()}function nk(a){if(\"function\"!==typeof a){var b;Array.isArray(a)?b=a:(L(a instanceof yh,41),b=[a]);a=function(){return b}}return a};function ok(a,b,c){return function(d,e,f){var g=new XMLHttpRequest;g.open(\"GET\",\"function\"===typeof a?a(d,e,f):a,!0);\"arraybuffer\"==b.$()&&(g.responseType=\"arraybuffer\");g.onload=function(){if(!g.status||200<=g.status&&300>g.status){var a=b.$(),d;\"json\"==a||\"text\"==a?d=g.responseText:\"xml\"==a?(d=g.responseXML,d||(a=g.responseText,d=(new DOMParser).parseFromString(a,\"application/xml\"))):\"arraybuffer\"==a&&(d=g.response);d&&c.call(this,b.a(d,{featureProjection:f}),b.c(pk(d)))}}.bind(this);g.send()}}\r\nfunction qk(a,b){return ok(a,b,function(a){this.Gb(a)})};function rk(){this.defaultDataProjection=null}function sk(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.c(pk(b)),featureProjection:c.featureProjection});var e;d&&(e={featureProjection:d.featureProjection,dataProjection:d.dataProjection?d.dataProjection:a.defaultDataProjection,rightHanded:d.rightHanded},d.decimals&&(e.decimals=d.decimals));return e}\r\nfunction tk(a,b){var c=b?Hb(b.featureProjection):null,d=b?Hb(b.dataProjection):null;if(c&&d&&!Tb(c,d))if(a instanceof Wb)c=a.transform(d,c);else{d=Ub(d,c);c=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];d(c,c,2);var e=[c[0],c[2],c[4],c[6]],f=[c[1],c[3],c[5],c[7]],c=Math.min.apply(null,e),d=Math.min.apply(null,f),e=Math.max.apply(null,e),f=Math.max.apply(null,f),c=ib(c,d,e,f,void 0)}else c=a;return c};function uk(){this.defaultDataProjection=null}B(uk,rk);function pk(a){return\"string\"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}uk.prototype.$=function(){return\"json\"};uk.prototype.g=function(a,b){return this.b(pk(a),sk(this,a,b))};uk.prototype.a=function(a,b){return this.h(pk(a),sk(this,a,b))};function vk(a,b,c,d,e){var f=NaN,g=NaN,h=(c-b)/d;if(0!==h)if(1==h)f=a[b],g=a[b+1];else if(2==h)f=.5*a[b]+.5*a[b+d],g=.5*a[b+1]+.5*a[b+d+1];else{var g=a[b],h=a[b+1],k=0,f=[0],l;for(l=b+d;l<c;l+=d){var m=a[l],p=a[l+1],k=k+Math.sqrt((m-g)*(m-g)+(p-h)*(p-h));f.push(k);g=m;h=p}c=.5*k;k=0;l=f.length;for(m=!1;k<l;)g=k+(l-k>>1),h=+Ma(f[g],c),0>h?k=g+1:(l=g,m=!h);g=m?k:~k;0>g?(c=(c-f[-g-2])/(f[-g-1]-f[-g-2]),b+=(-g-2)*d,f=a[b],f+=c*(a[b+d]-f),g=a[b+1],g+=c*(a[b+d+1]-g)):(f=a[b+g*d],g=a[b+g*d+1])}return e?\r\n(e[0]=f,e[1]=g,e):[f,g]};function wk(a,b){Yb.call(this);this.a=null;this.h=-1;this.ea(a,b)}B(wk,Yb);n=wk.prototype;n.clone=function(){var a=new wk(null);$b(a,this.c,this.o.slice());a.w();return a};n.za=function(){return ec(this.o,0,this.o.length,this.A)};function Nh(a){if(a.h!=a.b){var b;b=vk(a.o,0,a.o.length,a.A,a.a);a.a=b;a.h=a.b}return a.a}n.Qa=function(a){var b=[];b.length=gc(this.o,0,this.o.length,this.A,a,b,0);a=new wk(null);$b(a,\"XY\",b);a.w();return a};n.$=function(){return\"LineString\"};\r\nn.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function xk(a,b){Yb.call(this);this.ua=[];this.ea(a,b)}B(xk,Yb);n=xk.prototype;n.clone=function(){var a=new xk(null),b=this.ua.slice();$b(a,this.c,this.o.slice());a.ua=b;a.w();return a};n.za=function(){return fc(this.o,0,this.ua,this.A)};function Oh(a){var b=[],c=a.o,d=0,e=a.ua;a=a.A;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=vk(c,d,h,a);Pa(b,d);d=h}return b}\r\nn.Qa=function(a){var b=[],c=[],d=this.o,e=this.ua,f=this.A,g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],h=gc(d,g,m,f,a,b,h);c.push(h);g=m}b.length=h;a=new xk(null);$b(a,\"XY\",b);a.ua=c;a.w();return a};n.$=function(){return\"MultiLineString\"};n.ea=function(a,b){if(a){ac(this,b,a,2);this.o||(this.o=[]);var c=dc(this.o,0,a,this.A,this.ua);this.o.length=0===c.length?0:c[c.length-1]}else c=this.ua,$b(this,\"XY\",null),this.ua=c;this.w()};function yk(a,b){Yb.call(this);this.ea(a,b)}B(yk,Yb);yk.prototype.clone=function(){var a=new yk(null);$b(a,this.c,this.o.slice());a.w();return a};yk.prototype.za=function(){return ec(this.o,0,this.o.length,this.A)};yk.prototype.$=function(){return\"MultiPoint\"};yk.prototype.ea=function(a,b){a?(ac(this,b,a,1),this.o||(this.o=[]),this.o.length=cc(this.o,0,a,this.A)):$b(this,\"XY\",null);this.w()};function zk(a,b){Yb.call(this);this.a=[];this.v=-1;this.u=null;this.B=-1;this.h=null;this.ea(a,b)}B(zk,Yb);n=zk.prototype;n.clone=function(){for(var a=new zk(null),b=this.a.length,c=Array(b),d=0;d<b;++d)c[d]=this.a[d].slice();$b(a,this.c,this.o.slice());a.a=c;a.w();return a};n.za=function(a){var b;void 0!==a?(b=Ph(this).slice(),pc(b,this.a,this.A,a)):b=this.o;a=b;b=this.a;var c=this.A,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var k=b[g];e[f++]=fc(a,d,k,c,e[f]);d=k[k.length-1]}e.length=f;return e};\r\nfunction Qh(a){if(a.v!=a.b){var b=a.o,c=a.a,d=a.A,e=0,f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var l=c[g];k=b;var m=l[0],p=d,q=jb(void 0);k=nb(q,k,e,m,p);f.push((k[0]+k[2])/2,(k[1]+k[3])/2);e=l[l.length-1]}b=Ph(a);c=a.a;d=a.A;g=0;h=[];l=0;for(k=c.length;l<k;++l)e=c[l],h=lc(b,g,e,d,f,2*l,h),g=e[e.length-1];a.u=h;a.v=a.b}return a.u}\r\nfunction Ph(a){if(a.B!=a.b){var b=a.o,c;a:{c=a.a;var d,e;d=0;for(e=c.length;d<e;++d)if(!nc(b,c[d],a.A,void 0)){c=!1;break a}c=!0}c?a.h=b:(a.h=b.slice(),a.h.length=pc(a.h,a.a,a.A));a.B=a.b}return a.h}n.Qa=function(a){var b=[],c=[],d=this.o,e=this.a,f=this.A;a=Math.sqrt(a);var g=0,h=0,k,l;k=0;for(l=e.length;k<l;++k){var m=e[k],p=[],h=hc(d,g,m,f,a,b,h,p);c.push(p);g=m[m.length-1]}b.length=h;d=new zk(null);$b(d,\"XY\",b);d.a=c;d.w();return d};n.$=function(){return\"MultiPolygon\"};\r\nn.ea=function(a,b){if(a){ac(this,b,a,3);this.o||(this.o=[]);var c=this.o,d=this.A,e=this.a,f=0,e=e?e:[],g=0,h,k;h=0;for(k=a.length;h<k;++h)f=dc(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.o.length=0:(c=e[e.length-1],this.o.length=0===c.length?0:c[c.length-1])}else c=this.a,$b(this,\"XY\",null),this.a=c;this.w()};function Ak(a){a=a?a:{};this.defaultDataProjection=null;this.f=a.geometryName}B(Ak,uk);function Bk(a){var b=\"XY\";!0===a.hasZ&&!0===a.hasM?b=\"XYZM\":!0===a.hasZ?b=\"XYZ\":!0===a.hasM&&(b=\"XYM\");return b}\r\nvar Ck={Point:function(a){return void 0!==a.m&&void 0!==a.z?new jc([a.x,a.y,a.z,a.m],\"XYZM\"):void 0!==a.z?new jc([a.x,a.y,a.z],\"XYZ\"):void 0!==a.m?new jc([a.x,a.y,a.m],\"XYM\"):new jc([a.x,a.y])},LineString:function(a){return new wk(a.paths[0],Bk(a))},Polygon:function(a){return new qc(a.rings,Bk(a))},MultiPoint:function(a){return new yk(a.points,Bk(a))},MultiLineString:function(a){return new xk(a.paths,Bk(a))},MultiPolygon:function(a){return new zk(a.rings,Bk(a))}};\r\nAk.prototype.b=function(a,b){var c;if(c=a.geometry){var d;if(\"number\"===typeof c.x&&\"number\"===typeof c.y)d=\"Point\";else if(c.points)d=\"MultiPoint\";else if(c.paths)d=1===c.paths.length?\"LineString\":\"MultiLineString\";else if(c.rings){var e=c.rings,f=Bk(c),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var l=Oa(e[h]);mc(l,0,l.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(hb((new ic(g[h][0])).G(),(new ic(e)).G())){g[h].push(e);f=!0;break}f||\r\ng.push([e.reverse()])}c=pa({},c);1===g.length?(d=\"Polygon\",c.rings=g[0]):(d=\"MultiPolygon\",c.rings=g)}c=tk((0,Ck[d])(c),b)}else c=null;g=new kk;this.f&&mk(g,this.f);lk(g,c);b&&b.Tb&&a.attributes[b.Tb]&&(g.g=a.attributes[b.Tb],g.w());a.attributes&&g.l(a.attributes);return g};Ak.prototype.h=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.Tb=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.b(e[f],c));return d}return[this.b(a,c)]};\r\nAk.prototype.c=function(a){return a.spatialReference&&a.spatialReference.wkid?Hb(\"EPSG:\"+a.spatialReference.wkid):null};function Dk(a){Wb.call(this);this.a=a?a:null;Ek(this)}B(Dk,Wb);function Fk(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)ya(a.a[b],\"change\",a.w,a)}function Ek(a){var b,c;if(a.a)for(b=0,c=a.a.length;b<c;++b)R(a.a[b],\"change\",a.w,a)}n=Dk.prototype;n.clone=function(){var a=new Dk(null),b=this.a,c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());Fk(a);a.a=c;Ek(a);a.w();return a};n.mb=function(a){jb(a);for(var b=this.a,c=0,d=b.length;c<d;++c)mb(a,b[c].G());return a};\r\nn.Rb=function(a){this.i!=this.b&&(qa(this.f),this.g=0,this.i=this.b);if(0>a||0!==this.g&&a<this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=[],d=this.a,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k=h.Rb(a);c.push(k);k!==h&&(e=!0)}if(e)return a=new Dk(null),Fk(a),a.a=c,Ek(a),a.w(),this.f[b]=a;this.g=a;return this};n.$=function(){return\"GeometryCollection\"};n.rotate=function(a,b){for(var c=this.a,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.w()};\r\nn.scale=function(a,b,c){c||(c=tb(this.G()));for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.w()};n.Hb=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)b[c].Hb(a);this.w()};n.translate=function(a,b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].translate(a,b);this.w()};n.R=function(){Fk(this);Wb.prototype.R.call(this)};function Gk(a){a=a?a:{};this.defaultDataProjection=null;this.defaultDataProjection=Hb(a.defaultDataProjection?a.defaultDataProjection:\"EPSG:4326\");this.f=a.geometryName}B(Gk,uk);function Hk(a,b){return a?tk((0,Ik[a.type])(a),b):null}\r\nvar Ik={Point:function(a){return new jc(a.coordinates)},LineString:function(a){return new wk(a.coordinates)},Polygon:function(a){return new qc(a.coordinates)},MultiPoint:function(a){return new yk(a.coordinates)},MultiLineString:function(a){return new xk(a.coordinates)},MultiPolygon:function(a){return new zk(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Hk(a,b)});return new Dk(c)}};\r\nGk.prototype.b=function(a,b){var c=Hk(a.geometry,b),d=new kk;this.f&&mk(d,this.f);lk(d,c);void 0!==a.id&&(d.g=a.id,d.w());a.properties&&d.l(a.properties);return d};Gk.prototype.h=function(a,b){var c;if(\"Feature\"==a.type)c=[this.b(a,b)];else if(\"FeatureCollection\"==a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.b(d[e],b))}else L(!1,35);return c};\r\nGk.prototype.c=function(a){a=a.crs;var b;a?\"name\"==a.type?b=Hb(a.properties.name):\"EPSG\"==a.type?b=Hb(\"EPSG:\"+a.properties.code):L(!1,36):b=this.defaultDataProjection;return b};function Jk(a,b,c,d,e,f){Ga.call(this);this.l=null;this.b=a?a:new Image;null!==d&&(this.b.crossOrigin=d);this.f=f?document.createElement(\"CANVAS\"):null;this.h=f;this.g=null;this.c=e;this.a=c;this.s=b;this.i=!1;2==this.c&&Kk(this)}B(Jk,Ga);function Kk(a){var b=Md(1,1);try{b.drawImage(a.b,0,0),b.getImageData(0,0,1,1)}catch(c){a.i=!0}}Jk.prototype.j=function(){this.c=3;this.g.forEach(M);this.g=null;U(this,\"change\")};\r\nJk.prototype.v=function(){this.c=2;this.a&&(this.b.width=this.a[0],this.b.height=this.a[1]);this.a=[this.b.width,this.b.height];this.g.forEach(M);this.g=null;Kk(this);if(!this.i&&null!==this.h){this.f.width=this.b.width;this.f.height=this.b.height;var a=this.f.getContext(\"2d\");a.drawImage(this.b,0,0);for(var b=a.getImageData(0,0,this.b.width,this.b.height),c=b.data,d=this.h[0]/255,e=this.h[1]/255,f=this.h[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}U(this,\"change\")};\r\nJk.prototype.Z=function(){return this.f?this.f:this.b};Jk.prototype.load=function(){if(0==this.c){this.c=1;this.g=[R(this.b,\"error\",this.j,this,!0),R(this.b,\"load\",this.v,this,!0)];try{this.b.src=this.s}catch(a){this.j()}}};function Lk(a){a=a||{};this.g=void 0!==a.anchor?a.anchor:[.5,.5];this.f=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:\"top-left\";this.l=void 0!==a.anchorXUnits?a.anchorXUnits:\"fraction\";this.i=void 0!==a.anchorYUnits?a.anchorYUnits:\"fraction\";var b=void 0!==a.crossOrigin?a.crossOrigin:null,c=void 0!==a.img?a.img:null,d=void 0!==a.imgSize?a.imgSize:null,e=a.src;L(!(void 0!==e&&c),4);L(!c||c&&d,5);void 0!==e&&0!==e.length||!c||(e=c.src||J(c).toString());L(void 0!==e&&0<e.length,6);var f=void 0!==\r\na.src?0:2,g;void 0!==a.color?(g=a.color,g=Array.isArray(g)?g:pd(g)):g=null;var h=Af.get(e,b,g);h||(h=new Jk(c,e,d,b,f,g),Af.set(e,b,g,h));this.b=h;this.u=void 0!==a.offset?a.offset:[0,0];this.c=void 0!==a.offsetOrigin?a.offsetOrigin:\"top-left\";this.h=null;this.j=void 0!==a.size?a.size:null;oh.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?\r\na.rotateWithView:!1})}B(Lk,oh);n=Lk.prototype;n.eb=function(){if(this.f)return this.f;var a=this.g,b=this.Ka();if(\"fraction\"==this.l||\"fraction\"==this.i){if(!b)return null;a=this.g.slice();\"fraction\"==this.l&&(a[0]*=b[0]);\"fraction\"==this.i&&(a[1]*=b[1])}if(\"top-left\"!=this.a){if(!b)return null;a===this.g&&(a=this.g.slice());if(\"top-right\"==this.a||\"bottom-right\"==this.a)a[0]=-a[0]+b[0];if(\"bottom-left\"==this.a||\"bottom-right\"==this.a)a[1]=-a[1]+b[1]}return this.f=a};n.Z=function(a){return this.b.Z(a)};\r\nn.Ob=function(){return this.b.a};n.ib=function(){return this.b.c};n.ub=function(){var a=this.b;if(!a.l)if(a.i){var b=a.a[0],c=a.a[1],d=Md(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.b;return a.l};n.pa=function(){if(this.h)return this.h;var a=this.u;if(\"top-left\"!=this.c){var b=this.Ka(),c=this.b.a;if(!b||!c)return null;a=a.slice();if(\"top-right\"==this.c||\"bottom-right\"==this.c)a[0]=c[0]-b[0]-a[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)a[1]=c[1]-b[1]-a[1]}return this.h=a};\r\nn.Ka=function(){return this.j?this.j:this.b.a};n.Vb=function(a,b){return R(this.b,\"change\",a,b)};n.load=function(){this.b.load()};n.bc=function(a,b){ya(this.b,\"change\",a,b)};function Mk(a,b,c){Yb.call(this);Nk(this,a,b?b:0,c)}B(Mk,Yb);Mk.prototype.clone=function(){var a=new Mk(null);$b(a,this.c,this.o.slice());a.w();return a};Mk.prototype.mb=function(a){var b=this.o,c=b[this.A]-b[0];return ib(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};Mk.prototype.$=function(){return\"Circle\"};function Nk(a,b,c,d){if(b){ac(a,d,b,0);a.o||(a.o=[]);d=a.o;b=bc(d,b);d[b++]=d[0]+c;var e;c=1;for(e=a.A;c<e;++c)d[b++]=d[c];d.length=b}else $b(a,\"XY\",null);a.w()};function Ok(a,b,c,d,e){Sf.call(this,a,b);this.g=c;this.a=new Image;null!==d&&(this.a.crossOrigin=d);this.c={};this.f=null;this.h=e}B(Ok,Sf);n=Ok.prototype;n.R=function(){1==this.state&&Pk(this);this.b&&Da(this.b);this.state=5;Tf(this);Sf.prototype.R.call(this)};n.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.a:this.a.cloneNode(!1);return this.c[b]=a}return this.a};n.getKey=function(){return this.g};n.ce=function(){this.state=3;Pk(this);Tf(this)};\r\nn.de=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4;Pk(this);Tf(this)};n.load=function(){if(0==this.state||3==this.state)this.state=1,Tf(this),this.f=[R(this.a,\"error\",this.ce,this,!0),R(this.a,\"load\",this.de,this,!0)],this.h(this,this.g)};function Pk(a){a.f.forEach(M);a.f=null};function Qk(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Rk;\r\n(function(){var a={},b={Aa:a};(function(c){if(\"object\"===typeof a&&\"undefined\"!==typeof b)b.Aa=c();else{var d;\"undefined\"!==typeof window?d=window:\"undefined\"!==typeof global?d=global:\"undefined\"!==typeof self?d=self:d=this;d.Re=c()}})(function(){return function d(a,b,g){function h(l,p){if(!b[l]){if(!a[l]){var q=\"function\"==typeof require&&require;if(!p&&q)return q(l,!0);if(k)return k(l,!0);q=Error(\"Cannot find module '\"+l+\"'\");throw q.code=\"MODULE_NOT_FOUND\",q;}q=b[l]={Aa:{}};a[l][0].call(q.Aa,function(b){var d=\r\na[l][1][b];return h(d?d:b)},q,q.Aa,d,a,b,g)}return b[l].Aa}for(var k=\"function\"==typeof require&&require,l=0;l<g.length;l++)h(g[l]);return h}({1:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Db=Math.max(4,a||9);this.gc=Math.max(2,Math.ceil(.4*this.Db));b&&this.ad(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,g){g||(g=r(null));g.H=Infinity;g.J=Infinity;g.I=-Infinity;g.L=-Infinity;for(var f;b<d;b++)f=a.children[b],k(g,a.ga?e(f):f);return g}\r\nfunction k(a,b){a.H=Math.min(a.H,b.H);a.J=Math.min(a.J,b.J);a.I=Math.max(a.I,b.I);a.L=Math.max(a.L,b.L)}function l(a,b){return a.H-b.H}function m(a,b){return a.J-b.J}function p(a){return(a.I-a.H)*(a.L-a.J)}function q(a){return a.I-a.H+(a.L-a.J)}function u(a,b){return a.H<=b.H&&a.J<=b.J&&b.I<=a.I&&b.L<=a.L}function w(a,b){return b.H<=a.I&&b.J<=a.L&&b.I>=a.H&&b.L>=a.J}function r(a){return{children:a,height:1,ga:!0,H:Infinity,J:Infinity,I:-Infinity,L:-Infinity}}function x(a,b,d,e,g){for(var f=[b,d],\r\nh;f.length;)d=f.pop(),b=f.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,D(a,h,b,d,g),f.push(b,h,h,d))}b.Aa=f;var D=a(\"quickselect\");f.prototype={all:function(){return this.cc(this.data,[])},search:function(a){var b=this.data,d=[],e=this.la;if(!w(a,b))return d;for(var g=[],f,h,k,l;b;){f=0;for(h=b.children.length;f<h;f++)k=b.children[f],l=b.ga?e(k):k,w(a,l)&&(b.ga?d.push(k):u(a,l)?this.cc(k,d):g.push(k));b=g.pop()}return d},load:function(a){if(!a||!a.length)return this;if(a.length<this.gc){for(var b=0,\r\nd=a.length;b<d;b++)this.Ha(a[b]);return this}a=this.ec(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.hc(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.fc(a,this.data.height-a.height-1,!0)):this.data=a;return this},Ha:function(a){a&&this.fc(a,this.data.height-1);return this},clear:function(){this.data=r([]);return this},remove:function(a,b){if(!a)return this;for(var d=this.data,e=this.la(a),g=[],f=[],h,k,l,m;d||g.length;){d||(d=g.pop(),\r\nk=g[g.length-1],h=f.pop(),m=!0);if(d.ga){a:{l=a;var p=d.children,q=b;if(q){for(var r=0;r<p.length;r++)if(q(l,p[r])){l=r;break a}l=-1}else l=p.indexOf(l)}if(-1!==l){d.children.splice(l,1);g.push(d);this.$c(g);break}}m||d.ga||!u(d,e)?k?(h++,d=k.children[h],m=!1):d=null:(g.push(d),f.push(h),h=0,k=d,d=d.children[0])}return this},la:function(a){return a},Kb:l,Lb:m,toJSON:function(){return this.data},cc:function(a,b){for(var d=[];a;)a.ga?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},\r\nec:function(a,b,d,e){var f=d-b+1,h=this.Db,k;if(f<=h)return k=r(a.slice(b,d+1)),g(k,this.la),k;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));k=r([]);k.ga=!1;k.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),l,m,p;for(x(a,b,d,h,this.Kb);b<=d;b+=h)for(m=Math.min(b+h-1,d),x(a,b,m,f,this.Lb),l=b;l<=m;l+=f)p=Math.min(l+f-1,m),k.children.push(this.ec(a,l,p,e-1));g(k,this.la);return k},Zc:function(a,b,d,e){for(var f,g,h,k,l,m,q,r;;){e.push(b);if(b.ga||e.length-1===d)break;\r\nq=r=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],l=p(h),m=(Math.max(h.I,a.I)-Math.min(h.H,a.H))*(Math.max(h.L,a.L)-Math.min(h.J,a.J))-l,m<r?(r=m,q=l<q?l:q,k=h):m===r&&l<q&&(q=l,k=h);b=k||b.children[0]}return b},fc:function(a,b,d){var e=this.la;d=d?a:e(a);var e=[],f=this.Zc(d,this.data,b,e);f.children.push(a);for(k(f,d);0<=b;)if(e[b].children.length>this.Db)this.bd(e,b),b--;else break;this.Wc(d,e,b)},bd:function(a,b){var d=a[b],e=d.children.length,f=this.gc;this.Xc(d,f,e);e=this.Yc(d,\r\nf,e);e=r(d.children.splice(e,d.children.length-e));e.height=d.height;e.ga=d.ga;g(d,this.la);g(e,this.la);b?a[b-1].children.push(e):this.hc(d,e)},hc:function(a,b){this.data=r([a,b]);this.data.height=a.height+1;this.data.ga=!1;g(this.data,this.la)},Yc:function(a,b,d){var e,f,g,k,l,m,q;l=m=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.la),g=h(a,e,d,this.la),k=Math.max(0,Math.min(f.I,g.I)-Math.max(f.H,g.H))*Math.max(0,Math.min(f.L,g.L)-Math.max(f.J,g.J)),f=p(f)+p(g),k<l?(l=k,q=e,m=f<m?f:m):k===l&&f<m&&(m=\r\nf,q=e);return q},Xc:function(a,b,d){var e=a.ga?this.Kb:l,f=a.ga?this.Lb:m,g=this.dc(a,b,d,e);b=this.dc(a,b,d,f);g<b&&a.children.sort(e)},dc:function(a,b,d,e){a.children.sort(e);e=this.la;var f=h(a,0,b,e),g=h(a,d-b,d,e),l=q(f)+q(g),m,p;for(m=b;m<d-b;m++)p=a.children[m],k(f,a.ga?e(p):p),l+=q(f);for(m=d-b-1;m>=b;m--)p=a.children[m],k(g,a.ga?e(p):p),l+=q(g);return l},Wc:function(a,b,d){for(;0<=d;d--)k(b[d],a)},$c:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,\r\nd.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.la)},ad:function(a){var b=[\"return a\",\" - b\",\";\"];this.Kb=new Function(\"a\",\"b\",b.join(a[0]));this.Lb=new Function(\"a\",\"b\",b.join(a[1]));this.la=new Function(\"a\",\"return {minX: a\"+a[0]+\", minY: a\"+a[1]+\", maxX: a\"+a[2]+\", maxY: a\"+a[3]+\"};\")}}},{quickselect:2}],2:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var u=e-d+1,w=b-d+1,r=Math.log(u),x=.5*Math.exp(2*r/3),r=.5*Math.sqrt(r*x*(u-x)/u)*(0>w-u/2?-1:\r\n1);f(a,b,Math.max(d,Math.floor(b-w*x/u+r)),Math.min(e,Math.floor(b+(u-w)*x/u+r)),q)}u=a[b];w=d;x=e;g(a,d,b);for(0<q(a[e],u)&&g(a,d,e);w<x;){g(a,w,x);w++;for(x--;0>q(a[w],u);)w++;for(;0<q(a[x],u);)x--}0===q(a[d],u)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.Aa=f},{}]},{},[1])(1)});Rk=b.Aa})();function Sk(a){this.b=Rk(a);this.a={}}n=Sk.prototype;n.Ha=function(a,b){var c={H:a[0],J:a[1],I:a[2],L:a[3],value:b};this.b.Ha(c);this.a[J(b)]=c};n.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={H:f[0],J:f[1],I:f[2],L:f[3],value:g};c[d]=f;this.a[J(g)]=f}this.b.load(c)};n.remove=function(a){a=J(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};function Tk(a){return a.b.all().map(function(a){return a.value})}\r\nfunction Uk(a,b){return a.b.search({H:b[0],J:b[1],I:b[2],L:b[3]}).map(function(a){return a.value})}function Vk(a,b,c,d){return Wk(Uk(a,b),c,d)}function Wk(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}n.clear=function(){this.b.clear();this.a={}};n.G=function(){var a=this.b.data;return[a.H,a.J,a.I,a.L]};function Xk(a){a=a||{};vf.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:\"ready\",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.j=I;this.s=a.format;this.u=void 0==a.overlaps?!0:a.overlaps;this.B=a.url;void 0!==a.loader?this.j=a.loader:void 0!==this.B&&(L(this.s,7),this.j=qk(this.B,this.s));this.W=void 0!==a.strategy?a.strategy:Qk;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.X=b?new Sk:null;this.v=new Sk;this.ka={};this.c={};this.f={};this.g={};this.a=null;var c,\r\nd;a.features instanceof cd?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new cd(d));void 0!==d&&Yk(this,d);void 0!==c&&Zk(this,c)}B(Xk,vf);n=Xk.prototype;n.Fb=function(a){var b=J(a).toString();if($k(this,b,a)){al(this,b,a);var c=a.S();c?(b=c.G(),this.X&&this.X.Ha(b,a)):this.ka[b]=a;U(this,new bl(\"addfeature\",a))}this.w()};function al(a,b,c){a.g[b]=[R(c,\"change\",a.vc,a),R(c,\"propertychange\",a.vc,a)]}\r\nfunction $k(a,b,c){var d=!0,e=c.Pa();void 0!==e?e.toString()in a.c?d=!1:a.c[e.toString()]=c:(L(!(b in a.f),30),a.f[b]=c);return d}n.Gb=function(a){Yk(this,a);this.w()};function Yk(a,b){var c,d,e,f,g=[],h=[],k=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=J(f).toString(),$k(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=J(f).toString();al(a,c,f);var l=f.S();l?(c=l.G(),g.push(c),k.push(f)):a.ka[c]=f}a.X&&a.X.load(g,k);d=0;for(e=h.length;d<e;d++)U(a,new bl(\"addfeature\",h[d]))}\r\nfunction Zk(a,b){var c=!1;R(a,\"addfeature\",function(a){c||(c=!0,b.push(a.feature),c=!1)});R(a,\"removefeature\",function(a){c||(c=!0,b.remove(a.feature),c=!1)});R(b,hd,function(a){c||(c=!0,this.Fb(a.element),c=!1)},a);R(b,id,function(a){if(!c){c=!0;a=a.element;var b=J(a).toString();b in this.ka?delete this.ka[b]:this.X&&this.X.remove(a);this.Zb(a);this.w();c=!1}},a);a.a=b}\r\nn.clear=function(a){if(a){for(var b in this.g)this.g[b].forEach(M);this.a||(this.g={},this.c={},this.f={})}else if(this.X){a=this.Zb;Wk(Tk(this.X),a,this);for(var c in this.ka)this.Zb(this.ka[c])}this.a&&this.a.clear();this.X&&this.X.clear();this.v.clear();this.ka={};U(this,new bl(\"clear\"));this.w()};n.nd=function(a,b){if(this.X)return Wk(Tk(this.X),a,b);if(this.a)return ed(this.a,a,b)};function Qi(a,b,c,d){a.X?Vk(a.X,b,c,d):a.a&&ed(a.a,c,d)}\r\nn.pd=function(){var a;this.a?a=this.a.a:this.X&&(a=Tk(this.X),sa(this.ka)||Pa(a,ra(this.ka)));return a};n.G=function(){return this.X.G()};\r\nn.vc=function(a){a=a.target;var b=J(a).toString(),c=a.S();if(c)if(c=c.G(),b in this.ka)delete this.ka[b],this.X&&this.X.Ha(c,a);else{if(this.X){var d=this.X,e=d.a[J(a)];lb([e.H,e.J,e.I,e.L],c)||(d.remove(a),d.Ha(c,a))}}else b in this.ka||(this.X&&this.X.remove(a),this.ka[b]=a);c=a.Pa();void 0!==c?(c=c.toString(),b in this.f?(delete this.f[b],this.c[c]=a):this.c[c]!==a&&(cl(this,a),this.c[c]=a)):b in this.f||(cl(this,a),this.f[b]=a);this.w();U(this,new bl(\"changefeature\",a))};\r\nfunction Pi(a,b,c,d){var e=a.v;b=a.W(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Vk(e,h,function(a){return hb(a.extent,h)})||(a.j.call(a,h,c,d),e.Ha(h,{extent:h.slice()}))}}n.Zb=function(a){var b=J(a).toString();this.g[b].forEach(M);delete this.g[b];var c=a.Pa();void 0!==c?delete this.c[c.toString()]:delete this.f[b];U(this,new bl(\"removefeature\",a))};function cl(a,b){for(var c in a.c)if(a.c[c]===b){delete a.c[c];break}}function bl(a,b){T.call(this,a);this.feature=b}B(bl,T);function dl(a,b){T.call(this,a);this.feature=b}B(dl,T);\r\nfunction el(a){ng.call(this,{handleDownEvent:fl,handleEvent:gl,handleUpEvent:hl});this.W=null;this.s=!1;this.Ga=a.source?a.source:null;this.ma=a.features?a.features:null;this.jd=a.snapTolerance?a.snapTolerance:12;this.P=a.type;this.c=il(this.P);this.wa=a.minPoints?a.minPoints:this.c===jl?3:2;this.va=a.maxPoints?a.maxPoints:Infinity;this.Ab=a.finishCondition?a.finishCondition:yb;var b=a.geometryFunction;if(!b)if(\"Circle\"===this.P)b=function(a,b){var c=b?b:new Mk([NaN,NaN]),g=a[0],h=a[1],k=g[0]-h[0],\r\ng=g[1]-h[1];Nk(c,a[0],Math.sqrt(k*k+g*g));return c};else{var c,b=this.c;b===kl?c=jc:b===ll?c=wk:b===jl&&(c=qc);b=function(a,b){var f=b;f?f.ea(a):f=new c(a);return f}}this.u=b;this.D=this.i=this.a=this.j=this.g=this.h=null;this.kd=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ba=new Y({source:new Xk({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:ml()});this.Fa=a.geometryName;this.gd=a.condition?a.condition:jg;this.na=a.freehandCondition?a.freehandCondition:kg;R(this,\r\nLa(\"active\"),this.kb,this)}B(el,ng);function ml(){var a=Eh();return function(b){return a[b.S().$()]}}el.prototype.setMap=function(a){ng.prototype.setMap.call(this,a);this.kb()};function gl(a){this.c!==ll&&this.c!==jl||!this.na(a)||(this.s=!0);var b=!this.s;this.s&&a.type===qf?(nl(this,a),b=!1):a.type===pf?b=pl(this,a):a.type===jf&&(b=!1);return og.call(this,a)&&b}function fl(a){return this.gd(a)?(this.W=a.pixel,!0):this.s?(this.W=a.pixel,this.h||ql(this,a),!0):!1}\r\nfunction hl(a){this.s=!1;var b=this.W,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],c=!0;d*d+b*b<=this.kd&&(pl(this,a),this.h?this.c===rl?sl(this):tl(this,a)?this.Ab(a)&&sl(this):nl(this,a):(ql(this,a),this.c===kl&&sl(this)),c=!1);return c}\r\nfunction pl(a,b){if(a.h){var c=b.coordinate,d=a.g.S(),e;a.c===kl?e=a.a:a.c===jl?(e=a.a[0],e=e[e.length-1],tl(a,b)&&(c=a.h.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.u(a.a,d);a.j&&a.j.S().ea(c);d instanceof qc&&a.c!==jl?(a.i||(a.i=new kk(new wk(null))),0>=d.ja.length?d=null:(c=new ic(null),$b(c,d.c,d.o.slice(0,d.ja[0])),c.w(),d=c),c=a.i.S(),$b(c,d.c,d.o),c.w()):a.D&&(c=a.i.S(),c.ea(a.D));ul(a)}else d=b.coordinate.slice(),a.j?a.j.S().ea(d):(a.j=new kk(new jc(d)),ul(a));return!0}\r\nfunction tl(a,b){var c=!1;if(a.g){var d=!1,e=[a.h];a.c===ll?d=a.a.length>a.wa:a.c===jl&&(d=a.a[0].length>a.wa,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],k=ug(d,h),l=b.pixel,c=l[0]-k[0],k=l[1]-k[1],l=a.s&&a.na(b)?1:a.jd;if(c=Math.sqrt(c*c+k*k)<=l){a.h=h;break}}}return c}\r\nfunction ql(a,b){var c=b.coordinate;a.h=c;a.c===kl?a.a=c.slice():a.c===jl?(a.a=[[c.slice(),c.slice()]],a.D=a.a[0]):(a.a=[c.slice(),c.slice()],a.c===rl&&(a.D=a.a));a.D&&(a.i=new kk(new wk(a.D)));c=a.u(a.a);a.g=new kk;a.Fa&&mk(a.g,a.Fa);lk(a.g,c);ul(a);U(a,new dl(\"drawstart\",a.g))}\r\nfunction nl(a,b){var c=b.coordinate,d=a.g.S(),e,f;if(a.c===ll)a.h=c.slice(),f=a.a,f.push(c.slice()),e=f.length>a.va,a.u(f,d);else if(a.c===jl){f=a.a[0];f.push(c.slice());if(e=f.length>a.va)a.h=f[0];a.u(a.a,d)}ul(a);e&&sl(a)}\r\nfunction sl(a){var b=vl(a),c=a.a,d=b.S();a.c===ll?(c.pop(),a.u(c,d)):a.c===jl&&(c[0].pop(),c[0].push(c[0][0]),a.u(c,d));\"MultiPoint\"===a.P?lk(b,new yk([c])):\"MultiLineString\"===a.P?lk(b,new xk([c])):\"MultiPolygon\"===a.P&&lk(b,new zk([c]));U(a,new dl(\"drawend\",b));a.ma&&a.ma.push(b);a.Ga&&a.Ga.Fb(b)}function vl(a){a.h=null;var b=a.g;b&&(a.g=null,a.j=null,a.i=null,a.ba.da().clear(!0));return b}el.prototype.B=zb;\r\nfunction ul(a){var b=[];a.g&&b.push(a.g);a.i&&b.push(a.i);a.j&&b.push(a.j);a=a.ba.da();a.clear(!0);a.Gb(b)}el.prototype.kb=function(){var a=this.aa,b=this.get(\"active\");a&&b||vl(this);this.ba.setMap(b?a:null)};function il(a){var b;\"Point\"===a||\"MultiPoint\"===a?b=kl:\"LineString\"===a||\"MultiLineString\"===a?b=ll:\"Polygon\"===a||\"MultiPolygon\"===a?b=jl:\"Circle\"===a&&(b=rl);return b}var kl=\"Point\",ll=\"LineString\",jl=\"Polygon\",rl=\"Circle\";function wl(a,b,c,d,e,f,g,h,k,l,m){Sf.call(this,e,0);this.u=void 0!==m?m:!1;this.v=g;this.s=h;this.f=null;this.c={};this.g=b;this.l=d;this.i=f?f:e;this.a=[];this.Va=null;this.h=0;f=Qc(d,this.i);h=this.l.G();e=this.g.G();f=h?vb(f,h):f;if(0===ob(f))this.state=4;else if((h=a.G())&&(e?e=vb(e,h):e=h),h=d.O(this.i[0]),m=tb(f),d=Ub(c,a)(m,void 0,m.length),h=c.getPointResolution(h,m),m=Lb(c),void 0!==m&&(h*=m),m=Lb(a),void 0!==m&&(h/=m),d=a.getPointResolution(h,d)/h,isFinite(d)&&0<d&&(h/=d),d=h,!isFinite(d)||\r\n0>=d)this.state=4;else if(this.j=new Ji(a,c,f,e,d*(void 0!==l?l:.5)),0===this.j.f.length)this.state=4;else if(this.h=Xc(b,d),c=Li(this.j),e&&(a.b?(c[1]=ia(c[1],e[1],e[3]),c[3]=ia(c[3],e[1],e[3])):c=vb(c,e)),ob(c)){a=Rc(b,c,this.h);for(b=a.H;b<=a.I;b++)for(c=a.J;c<=a.L;c++)(l=k(this.h,b,c,g))&&this.a.push(l);0===this.a.length&&(this.state=4)}else this.state=4}B(wl,Sf);wl.prototype.R=function(){1==this.state&&(this.Va.forEach(M),this.Va=null);Sf.prototype.R.call(this)};\r\nwl.prototype.Z=function(a){if(void 0!==a){var b=J(a);if(b in this.c)return this.c[b];a=sa(this.c)?this.f:this.f.cloneNode(!1);return this.c[b]=a}return this.f};\r\nwl.prototype.Tc=function(){var a=[];this.a.forEach(function(b){b&&2==b.T()&&a.push({extent:Qc(this.g,b.V),image:b.Z()})},this);this.a.length=0;if(0===a.length)this.state=3;else{var b=this.i[0],c=Wc(this.l,b),d=\"number\"===typeof c?c:c[0],c=\"number\"===typeof c?c:c[1],b=this.l.O(b),e=this.g.O(this.h),f=Qc(this.l,this.i);this.f=Ii(d,c,this.v,e,this.g.G(),b,f,this.j,a,this.s,this.u);this.state=2}Tf(this)};\r\nwl.prototype.load=function(){if(0==this.state){this.state=1;Tf(this);var a=0;this.Va=[];this.a.forEach(function(b){var c=b.T();if(0==c||1==c){a++;var d;d=R(b,\"change\",function(){var c=b.T();if(2==c||3==c||4==c)M(d),a--,0===a&&(this.Va.forEach(M),this.Va=null,this.Tc())},this);this.Va.push(d)}},this);this.a.forEach(function(a){0==a.T()&&a.load()});0===a&&K.setTimeout(this.Tc.bind(this),0)}};function xl(a,b){var c=/\\{z\\}/g,d=/\\{x\\}/g,e=/\\{y\\}/g,f=/\\{-y\\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;L(a,55);return(a.L-a.J+1+g[2]).toString()})}}function yl(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=xl(a[e],b);return zl(d)}function zl(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[la((b[1]<<b[0])+b[2],a.length)](b,c,d)}}\r\nfunction Al(){};function Bl(a){Xj.call(this);this.g=void 0!==a?a:2048}B(Bl,Xj);function Cl(a){return a.f>a.g}Bl.prototype.Oa=function(a){for(var b,c;Cl(this);){b=this.b.Na;c=b.V[0].toString();var d;if(d=c in a)b=b.V,d=Hc(a[c],b[1],b[2]);if(d)break;else Da(this.pop())}};function Dl(a){vf.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.u=void 0!==a.opaque?a.opaque:!1;this.aa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Bl(a.cacheSize);this.g=[0,0];this.Ia=\"\"}B(Dl,vf);n=Dl.prototype;n.Mc=function(){return Cl(this.a)};n.Oa=function(a,b){var c=this.fb(a);c&&c.Oa(b)};\r\nfunction Sh(a,b,c,d,e){b=a.fb(b);if(!b)return!1;for(var f=!0,g,h,k=d.H;k<=d.I;++k)for(var l=d.J;l<=d.L;++l)g=a.ob(c,k,l),h=!1,Uj(b,g)&&(g=b.get(g),(h=2===g.T())&&(h=!1!==e(g))),h||(f=!1);return f}n.nb=function(){return 0};n.getKey=function(){return this.Ia};n.ob=function(a,b,c){return a+\"/\"+b+\"/\"+c};n.Qb=function(){return this.u};n.sa=function(a){return this.tileGrid?this.tileGrid:Zc(a)};n.fb=function(a){var b=this.ia();return b&&!Tb(b,a)?null:this.a};n.pb=function(){return this.aa};\r\nfunction Ni(a,b,c,d){d=a.sa(d);c=a.pb(c);b=Lc(Wc(d,b),a.g);return 1==c?b:Kc(b,c,a.g)}function El(a,b,c){var d=void 0!==c?c:a.ia();c=a.sa(d);if(a.i&&d.c){var e=b;b=e[0];a=Vc(c,e);var d=$c(d),f=a[0],g=a[1];d[0]<=f&&f<=d[2]&&d[1]<=g&&g<=d[3]?b=e:(e=qb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=Yc(c,a,b))}d=b[0];a=b[1];e=b[2];c=c.minZoom>d||d>c.maxZoom?!1:(c=(f=c.G())?Rc(c,f,d):c.a?c.a[d]:null)?Hc(c,a,e):!0;return c?b:null}n.Ja=function(){this.a.clear();this.w()};n.Vc=I;\r\nfunction Fl(a,b){T.call(this,a);this.tile=b}B(Fl,T);function Gl(a){Dl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.f?this.f.bind(this):Al;this.urls=null;if(a.urls){var b=a.urls;this.urls=b;var c=b.join(\"\\n\");Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),c)}else a.url&&this.s(a.url);a.tileUrlFunction&&Hl(this,a.tileUrlFunction)}\r\nB(Gl,Dl);Gl.prototype.v=function(a){a=a.target;switch(a.T()){case 1:U(this,new Fl(\"tileloadstart\",a));break;case 2:U(this,new Fl(\"tileloadend\",a));break;case 3:U(this,new Fl(\"tileloaderror\",a))}};function Hl(a,b,c){a.tileUrlFunction=b;\"undefined\"!==typeof c?a.Ia!==c&&(a.Ia=c,a.w()):a.w()}\r\nGl.prototype.s=function(a){var b=[],c=/\\{(\\d)-(\\d)\\}/.exec(a)||/\\{([a-z])-([a-z])\\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)))}else b.push(a);b=this.urls=b;Hl(this,this.f?this.f.bind(this):yl(b,this.tileGrid),a)};Gl.prototype.Vc=function(a,b,c){a=this.ob(a,b,c);Uj(this.a,a)&&this.a.get(a)};function Il(a){Gl.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Jl,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Ok;this.c={};this.j={};this.W=a.reprojectionErrorThreshold}\r\nB(Il,Gl);n=Il.prototype;n.Mc=function(){if(Cl(this.a))return!0;for(var a in this.c)if(Cl(this.c[a]))return!0;return!1};n.Oa=function(a,b){var c=this.fb(a);this.a.Oa(this.a==c?b:{});for(var d in this.c){var e=this.c[d];e.Oa(e==c?b:{})}};n.nb=function(a){return this.ia()&&a&&Tb(this.ia(),a),0};n.Qb=function(a){return this.ia()&&a&&!Tb(this.ia(),a)?!1:Gl.prototype.Qb.call(this,a)};\r\nn.sa=function(a){var b=this.ia();return!this.tileGrid||b&&!Tb(b,a)?(b=J(a).toString(),b in this.j||(this.j[b]=Zc(a)),this.j[b]):this.tileGrid};n.fb=function(a){var b=this.ia();if(!b||Tb(b,a))return this.a;a=J(a).toString();a in this.c||(this.c[a]=new Bl);return this.c[a]};function Kl(a,b,c,d,e,f,g){b=[b,c,d];e=(c=El(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",a.crossOrigin,a.tileLoadFunction);e.key=g;R(e,\"change\",a.v,a);return e}\r\nfunction $h(a,b,c,d,e,f){if(a.ia()&&f&&!Tb(a.ia(),f)){var g=a.fb(f);d=[b,c,d];var h;b=a.ob.apply(a,d);Uj(g,b)&&(h=g.get(b));c=a.getKey();if(h&&h.key==c)return h;var k=a.ia(),l=a.sa(k),m=a.sa(f),p=El(a,d,f);a=new wl(k,l,f,m,d,p,a.pb(e),0,function(a,b,c,d){return Ll(this,a,b,c,d,k)}.bind(a),a.W,!1);a.key=c;h?(a.b=h,Zj(g,b,a)):g.set(b,a);return a}return Ll(a,b,c,d,e,f)}\r\nfunction Ll(a,b,c,d,e,f){var g,h=a.ob(b,c,d),k=a.getKey();if(Uj(a.a,h)){if(g=a.a.get(h),g.key!=k){var l=g;g.b&&g.b.key==k?(g=g.b,2==l.T()&&(g.b=l)):(g=Kl(a,b,c,d,e,f,k),2==l.T()?g.b=l:l.b&&2==l.b.T()&&(g.b=l.b,l.b=null));g.b&&(g.b.b=null);Zj(a.a,h,g)}}else g=Kl(a,b,c,d,e,f,k),a.a.set(h,g);return g}function Jl(a,b){a.Z().src=b};function Ml(a){a=a||{};var b=void 0!==a.projection?a.projection:\"EPSG:3857\",c;if(void 0!==a.tileGrid)c=a.tileGrid;else{c={extent:$c(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize};var d={};pa(d,void 0!==c?c:{});void 0===d.extent&&(d.extent=Hb(\"EPSG:3857\").G());d.resolutions=ad(d.extent,d.maxZoom,d.tileSize);delete d.maxZoom;c=new Mc(d)}Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,\r\ntileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0})}B(Ml,Il);function Nl(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+\"=\"+encodeURIComponent(b[a]))});var d=c.join(\"&\");a=a.replace(/[?&]$/,\"\");a=-1===a.indexOf(\"?\")?a+\"?\":a+\"&\";return a+d};function Ol(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[Pl];Ml.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:\"anonymous\",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:a.wrapX})}B(Ol,Ml);var Pl=new bd({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function Ql(a){a=a||{};Il.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.B=a.params||{};this.ba=db()}B(Ql,Il);Ql.prototype.pb=function(a){return a};\r\nQl.prototype.f=function(a,b,c){var d=this.tileGrid;d||(d=this.sa(c));if(!(d.b.length<=a[0])){var e=Qc(d,a,this.ba),f=Lc(Wc(d,a[0]),this.g);1!=b&&(f=Kc(f,b,this.g));d={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};pa(d,this.B);var g=this.urls;g?(c=c.ya.split(\":\").pop(),d.SIZE=f[0]+\",\"+f[1],d.BBOX=e.join(\",\"),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[la((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\"ImageServer/exportImage\"),\r\nb==a&&L(!1,50),d=Nl(b,d)):d=void 0;return d}};function Rl(a){this.j=this.l=this.f=null;this.i=void 0!==a.fill?a.fill:null;this.M=[0,0];this.b=a.points;this.c=void 0!==a.radius?a.radius:a.radius1;this.g=void 0!==a.radius2?a.radius2:this.c;this.h=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.D=this.Y=this.u=null;var b=a.atlasManager,c=\"\",d=\"\",e=0,f=null,g,h=0;this.a&&(g=nd(this.a.a),h=this.a.c,void 0===h&&(h=1),f=this.a.b,pe||(f=null),d=this.a.g,void 0===d&&(d=\"round\"),c=this.a.f,void 0===c&&(c=\"round\"),e=this.a.h,void 0===\r\ne&&(e=10));var k=2*(this.c+h)+1,c={strokeStyle:g,jb:h,size:k,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var l=Md(k,k);this.l=l.canvas;b=k=this.l.width;this.Qc(c,l,0,0);this.i?this.j=this.l:(l=Md(c.size,c.size),this.j=l.canvas,this.Pc(c,l,0,0))}else k=Math.round(k),(d=!this.i)&&(l=this.Pc.bind(this,c)),e=this.a?qh(this.a):\"-\",f=this.i?rh(this.i):\"-\",this.f&&e==this.f[1]&&f==this.f[2]&&this.c==this.f[3]&&this.g==this.f[4]&&this.h==this.f[5]&&this.b==this.f[6]||(this.f=[\"r\"+e+f+(void 0!==\r\nthis.c?this.c.toString():\"-\")+(void 0!==this.g?this.g.toString():\"-\")+(void 0!==this.h?this.h.toString():\"-\")+(void 0!==this.b?this.b.toString():\"-\"),e,f,this.c,this.g,this.h,this.b]),l=b.add(this.f[0],k,k,this.Qc.bind(this,c),l),this.l=l.image,this.M=[l.offsetX,l.offsetY],b=l.image.width,d?this.j=l.Nd:this.j=this.l;this.u=[k/2,k/2];this.Y=[k,k];this.D=[b,b];oh.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,snapToPixel:void 0!==\r\na.snapToPixel?a.snapToPixel:!0})}B(Rl,oh);n=Rl.prototype;n.eb=function(){return this.u};n.ub=function(){return this.j};n.Z=function(){return this.l};n.Ob=function(){return this.D};n.ib=function(){return 2};n.pa=function(){return this.M};n.Ka=function(){return this.Y};n.Vb=I;n.load=I;n.bc=I;\r\nn.Qc=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.h,e=0===c%2?this.c:this.g,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.i&&(b.fillStyle=qd(this.i.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};\r\nn.Pc=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.g!==this.c&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.h,d=0===c%2?this.c:this.g,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=kh;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.jb,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};y(\"ol.format.GeoJSON\",Gk);Gk.prototype.readFeatures=Gk.prototype.a;Gk.prototype.readFeature=Gk.prototype.g;y(\"ol.format.EsriJSON\",Ak);Ak.prototype.readFeatures=Ak.prototype.a;Ak.prototype.readFeature=Ak.prototype.g;y(\"ol.style.Style\",yh);y(\"ol.style.Circle\",ph);y(\"ol.style.RegularShape\",Rl);y(\"ol.style.Fill\",sh);y(\"ol.style.Stroke\",xh);y(\"ol.style.Icon\",Lk);\r\ny(\"ol.style.Text\",function(a){a=a||{};this.b=a.font;this.h=a.rotation;this.g=a.rotateWithView;this.l=a.scale;this.j=a.text;this.C=a.textAlign;this.K=a.textBaseline;this.f=void 0!==a.fill?a.fill:new sh({color:\"#333\"});this.i=void 0!==a.stroke?a.stroke:null;this.a=void 0!==a.offsetX?a.offsetX:0;this.c=void 0!==a.offsetY?a.offsetY:0});y(\"ol.View\",uc);uc.prototype.on=uc.prototype.Y;uc.prototype.getZoom=uc.prototype.rd;uc.prototype.setZoom=uc.prototype.ye;uc.prototype.getCenter=uc.prototype.qa;\r\nuc.prototype.setCenter=uc.prototype.xa;uc.prototype.calculateExtent=uc.prototype.lc;uc.prototype.getProjection=uc.prototype.ia;uc.prototype.fit=uc.prototype.md;y(\"ol.control.defaults\",ee);y(\"ol.layer.Tile\",W);W.prototype.getVisible=W.prototype.gb;W.prototype.setVisible=W.prototype.Cc;W.prototype.getZIndex=W.prototype.Yb;W.prototype.setZIndex=W.prototype.Dc;W.prototype.getOpacity=W.prototype.Xb;W.prototype.setOpacity=W.prototype.Bc;W.prototype.getSource=W.prototype.da;W.prototype.setSource=W.prototype.$b;\r\nW.prototype.on=W.prototype.Y;y(\"ol.layer.Vector\",Y);Y.prototype.getVisible=Y.prototype.gb;Y.prototype.setVisible=Y.prototype.Cc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setStyle=Y.prototype.v;Y.prototype.getZIndex=Y.prototype.Yb;Y.prototype.setZIndex=Y.prototype.Dc;Y.prototype.getOpacity=Y.prototype.Xb;Y.prototype.setOpacity=Y.prototype.Bc;Y.prototype.getSource=Y.prototype.da;Y.prototype.setSource=Y.prototype.$b;Y.prototype.on=Y.prototype.Y;y(\"ol.source.OSM\",Ol);Ol.prototype.refresh=Ol.prototype.Ja;\r\ny(\"ol.source.XYZ\",Ml);Ml.prototype.refresh=Ml.prototype.Ja;Ml.prototype.setUrl=Ml.prototype.s;Ml.prototype.refresh=Ml.prototype.Ja;y(\"ol.Map\",Z);Z.prototype.on=Z.prototype.Y;Z.prototype.getTarget=Z.prototype.Wb;Z.prototype.getTargetElement=Z.prototype.Ra;Z.prototype.getView=Z.prototype.U;Z.prototype.addOverlay=Z.prototype.fd;Z.prototype.addLayer=Z.prototype.ed;Z.prototype.removeLayer=Z.prototype.te;Z.prototype.getEventPixel=Z.prototype.uc;Z.prototype.hasFeatureAtPixel=Z.prototype.Md;\r\nZ.prototype.getSize=Z.prototype.Ta;Z.prototype.updateSize=Z.prototype.yb;Z.prototype.forEachFeatureAtPixel=Z.prototype.od;Z.prototype.addInteraction=Z.prototype.dd;Z.prototype.removeInteraction=Z.prototype.se;Z.prototype.beforeRender=Z.prototype.oa;Z.prototype.addControl=Z.prototype.cd;Z.prototype.once=Z.prototype.hd;Z.prototype.renderSync=Z.prototype.we;y(\"ol.source.Vector\",Xk);Xk.prototype.getFeatures=Xk.prototype.pd;Xk.prototype.getExtent=Xk.prototype.G;Xk.prototype.refresh=Xk.prototype.Ja;\r\nXk.prototype.addFeatures=Xk.prototype.Gb;Xk.prototype.addFeature=Xk.prototype.Fb;Xk.prototype.clear=Xk.prototype.clear;Xk.prototype.forEachFeature=Xk.prototype.nd;Xk.prototype.refresh=Xk.prototype.Ja;y(\"ol.source.TileArcGISRest\",Ql);Ql.prototype.refresh=Ql.prototype.Ja;y(\"ol.Overlay\",gk);gk.prototype.setPosition=gk.prototype.Ac;y(\"ol.Feature\",kk);kk.prototype.getProperties=kk.prototype.Ea;kk.prototype.setProperties=kk.prototype.l;kk.prototype.getGeometry=kk.prototype.S;y(\"ol.geom.Point\",jc);\r\njc.prototype.transform=jc.prototype.transform;jc.prototype.getCoordinates=jc.prototype.za;jc.prototype.getExtent=jc.prototype.G;y(\"ol.geom.Polygon\",qc);qc.prototype.getCoordinates=qc.prototype.za;qc.prototype.getExtent=qc.prototype.G;qc.prototype.transform=qc.prototype.transform;y(\"ol.geom.LineString\",wk);wk.prototype.getCoordinates=wk.prototype.za;wk.prototype.getExtent=wk.prototype.G;wk.prototype.transform=wk.prototype.transform;y(\"ol.proj.Projection\",Eb);Eb.prototype.getCode=Eb.prototype.l;\r\ny(\"ol.interaction.Draw\",el);el.prototype.on=el.prototype.Y;y(\"ol.animation.pan\",Dc);y(\"ol.control.FullScreen\",Xd);\r\n  return OPENLAYERS.ol;\r\n}));\r\n\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/custom-ol/ol/ol-build.js\n ** module id = 6\n ** module chunks = 1 2 5\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\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMove.ts\n **/","import LayerBaseVector from \"../layers/LayerBaseVector\";\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\nimport {ol} from 'custom-ol'\r\nimport Timer = NodeJS.Timer;\r\nconst $ = require('jquery');\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: Object;\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<Timer>;\r\n    _mapMoveCallbackTimeout: Array<Timer>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: Object;\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\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    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: ol.Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (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 lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\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 ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\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  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\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    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\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] = functionId;\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapMoveCls.ts\n **/","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: ol.Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\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 theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: ol.Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\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\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapInteractionBase.ts\n **/","import 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 true undefined or null\r\n */\r\nexport function undefinedOrNull (input): boolean{\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 true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/checkDefined.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/makeGuid.ts\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\n\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopup.ts\n **/","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport MapEvent = ol.MapEvent;\r\nconst $ = require('jquery');\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction{\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback{\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent{\r\n    coordinate: ol.Coordinate;\r\n    pixel: ol.Pixel;\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: ol.Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: ol.layer.Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: ol.Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: ol.layer.Vector, esriLayerName?: string) {\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    _popupOpen: boolean;\r\n    _passThroughLayerFeatureArray:  Array<FeatureLayerProperties>;\r\n    _currentPopupIndex: number;\r\n    _popupContentLength: number;\r\n    _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    _$popupCloser: JQuery;\r\n    _$popupContent: JQuery;\r\n    _$popupContainer: JQuery;\r\n    _popupOverlay: ol.Overlay;\r\n    _arrPopupLayers: Array<LayerBaseVector>;\r\n    _popupCoordinate: ol.Coordinate;\r\n    _popupChangedFunctions: Array<popupChangedFunction>;\r\n     _mapClickFunctions: Array<Function>;\r\n    _selectionLayerLookup: Object;\r\n     _arrPopupLayerIds: Array<string>;\r\n     _arrPopupLayerNames: Array<string>;\r\n    _arrPopupOlLayers: Array<ol.layer.Vector>;\r\n    _arrPopupContentFunction: Array<popupCallback>;\r\n    _selectionLayers: Array<ol.layer.Vector>;\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\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        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        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\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: ol.Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if(typeof target == 'string'){\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\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\r\n        this._popupOverlay = new ol.Overlay({element: this._$popupContainer[0], autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter()\r\n            }});\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'];\r\n\r\n            // esri map service layers\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);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);\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 as string;\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', (evt) => {\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['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            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n\r\n        return true;\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 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: ol.Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\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  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: ol.Pixel): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: ol.Feature, layer: ol.layer.Vector) =>{\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(\r\n                    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     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\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  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr, selectionStyle): ol.layer.Vector {\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\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: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\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     *\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?: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction) {\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: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/mapPopupCls.ts\n **/","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} 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 'custom-ol';\r\nconst nm = provide('layers');\r\n\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions{\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n\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     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\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?: string) {\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        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            super.addLegendContent(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     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerEsriMapServer.ts\n **/","import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-ol';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('layers');\r\nconst $ = require('jquery');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    _legendCheckbox: boolean;\r\n    _url: string;\r\n    _opacity: number;\r\n    _minZoom: number;\r\n    _maxZoom: number;\r\n    _visible: boolean;\r\n    _loaded: boolean;\r\n    _zIndex: number;\r\n    _legendContent: string;\r\n    _params: any;\r\n    id: string;\r\n    _name: string;\r\n    _source: ol.source.Source;\r\n    animate: boolean;\r\n    _legendCollapse: boolean;\r\n    _maxResolution: number;\r\n    _minResolution: number;\r\n    _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    _olLayer: ol.layer.Layer;\r\n    _applyCollapseCalled: boolean;\r\n\r\n\r\n\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: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\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        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\r\n        /**\r\n         *\r\n         * @protected\r\n         */\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        }\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(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\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    /**\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(): ol.source.Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): ol.source.Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): ol.layer.Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/layers/LayerBase.ts\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/zoomResolutionConvert.ts\n **/","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport {ol} from 'custom-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\nexport interface EsriResponse{\r\n    drawingInfo: {\r\n        renderer: EsriRenderer\r\n    },\r\n    geometryType: string\r\n}\r\n\r\nexport interface EsriRenderer{\r\n    type: string;\r\n    symbol: EsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n}\r\n\r\nexport interface EsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: string;\r\n        width: number;\r\n    },\r\n    color: string;\r\n    width: number;\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: EsriSymbol;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\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\ninterface ICommonSymbol{\r\n    new (symbolObj: EsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: EsriSymbol, opacity: number) {\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: EsriSymbol, opacity: number) {\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: EsriSymbol, opacity: number) {\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    opacity: number;\r\n    renderer: EsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n\r\n    constructor(esriResponse: 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    symbol: EsriSymbol;\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: ICommonSymbol) {\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    propertyName: string;\r\n    defaultSymbol: EsriSymbol;\r\n    defaultStyle: ol.style.Style|Array<ol.style.Style>|ol.style.StyleFunction;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: Object;\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: EsriSymbol}>;\r\n\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: 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\r\n        this.olStyle = (feature: ol.Feature) => {\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\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: EsriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = 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 *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\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        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<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 (!skipLayerNameAndExpander) {\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/olHelpers/esriToOlStyle.ts\n **/","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\nimport {ol} from 'custom-ol';\r\nconst $ = require('jquery');\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: any;\r\n    addCheck: any;\r\n    layerParentLookup: any;\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    $divElement: any;\r\n    _legendItems: any;\r\n    layerGroup: any;\r\n    legendId: any;\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 {boolean} [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        //// 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\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    /**\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}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/LayerLegend.ts\n **/"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test-html/js/slider-test.js b/test-html/js/slider-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..1bf07c5bc66eb51dea0b500ea491d293ca1a3f01
--- /dev/null
+++ b/test-html/js/slider-test.js
@@ -0,0 +1,10648 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+/******/
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+	/**
+	 * Created by gavorhes on 6/22/2016.
+	 */
+	var Sliders_1 = __webpack_require__(27);
+	var $ = __webpack_require__(3);
+	exports.tipConfig = {
+	    $loadingGif: $('#loading-gif'),
+	    $presetSelector: $('#preset-selector'),
+	    $regionSelector: $('#region-selector'),
+	    $versionSelector: $('#version-selector'),
+	    tipSegmentLayerMinZoom: 10,
+	    slidersConfig: [
+	        {
+	            label: 'AADT',
+	            yearOptions: [
+	                { label: '1', column: 'aadtyr_1' }
+	            ]
+	        },
+	        {
+	            label: 'AADT Future',
+	            yearOptions: [
+	                { label: '5', column: 'aadtyr_5' },
+	                { label: '10', column: 'aadtyr_10' },
+	                { label: '15', column: 'aadtyr_15' },
+	                { label: '20', column: 'aadtyr_20' }
+	            ]
+	        },
+	        {
+	            label: 'Growth',
+	            yearOptions: [
+	                { label: '5', column: 'growth_5' },
+	                { label: '10', column: 'growth_10' },
+	                { label: '15', column: 'growth_15' },
+	                { label: '20', column: 'growth_20' }
+	            ]
+	        },
+	        {
+	            label: 'Truck',
+	            yearOptions: [
+	                { label: '1', column: 'trkdyr_1' },
+	                { label: '20', column: 'trkdyr_20' }
+	            ]
+	        },
+	        {
+	            label: 'LOS',
+	            yearOptions: [
+	                { label: '1', column: 'losyr_1' }
+	            ]
+	        },
+	        {
+	            label: 'LOS Future',
+	            yearOptions: [
+	                { label: '5', column: 'losyr_5' },
+	                { label: '10', column: 'losyr_10' },
+	                { label: '15', column: 'losyr_15' },
+	                { label: '20', column: 'losyr_20' }
+	            ]
+	        },
+	        {
+	            label: 'Crash Rate',
+	            yearOptions: [
+	                { label: 1, column: 'crash_rate' }
+	            ]
+	        },
+	        {
+	            label: 'Severity',
+	            yearOptions: [
+	                { label: 1, column: 'crash_severity' }
+	            ]
+	        },
+	        {
+	            label: 'Weather',
+	            yearOptions: [
+	                { label: 1, column: 'weather' }
+	            ]
+	        },
+	        {
+	            label: 'Event',
+	            yearOptions: [
+	                { label: 1, column: 'event' }
+	            ]
+	        }
+	    ],
+	    presetConfig: [
+	        {
+	            label: 'Default TIP',
+	            presets: [
+	                { column: 'aadtyr_1', value: 10.0 },
+	                { column: 'aadtyr_20', value: 7.0 },
+	                { column: 'growth_20', value: 7.0 },
+	                { column: 'trkdyr_1', value: 4.0 },
+	                { column: 'losyr_1', value: 12.0 },
+	                { column: 'losyr_20', value: 12.0 },
+	                { column: 'crash_rate', value: 15.0 },
+	                { column: 'crash_severity', value: 13.0 },
+	                { column: 'weather', value: 9.0 },
+	                { column: 'event', value: 11.0 }
+	            ]
+	        },
+	        {
+	            label: 'Safety',
+	            presets: [
+	                { column: 'aadtyr_1', value: 20.0 },
+	                { column: 'aadtyr_20', value: 0.0 },
+	                { column: 'growth_20', value: 0.0 },
+	                { column: 'trkdyr_1', value: 0.0 },
+	                { column: 'losyr_1', value: 0.0 },
+	                { column: 'losyr_20', value: 0.0 },
+	                { column: 'crash_rate', value: 40.0 },
+	                { column: 'crash_severity', value: 40.0 },
+	                { column: 'weather', value: 0.0 },
+	                { column: 'event', value: 0.0 }
+	            ]
+	        },
+	        {
+	            label: 'Mobility Present',
+	            presets: [
+	                { column: 'aadtyr_1', value: 25.0 },
+	                { column: 'aadtyr_20', value: 25.0 },
+	                { column: 'growth_20', value: 0.0 },
+	                { column: 'trkdyr_1', value: 25.0 },
+	                { column: 'losyr_1', value: 25.0 },
+	                { column: 'losyr_20', value: 0.0 },
+	                { column: 'crash_rate', value: 0.0 },
+	                { column: 'crash_severity', value: 0.0 },
+	                { column: 'weather', value: 0.0 },
+	                { column: 'event', value: 0.0 }
+	            ]
+	        },
+	        {
+	            label: 'Mobility Future',
+	            presets: [
+	                { column: 'aadtyr_1', value: 0.0 },
+	                { column: 'aadtyr_20', value: 25.0 },
+	                { column: 'growth_20', value: 25.0 },
+	                { column: 'trkdyr_1', value: 25.0 },
+	                { column: 'losyr_1', value: 0.0 },
+	                { column: 'losyr_20', value: 25.0 },
+	                { column: 'crash_rate', value: 0.0 },
+	                { column: 'crash_severity', value: 0.0 },
+	                { column: 'weather', value: 0.0 },
+	                { column: 'event', value: 0.0 }
+	            ]
+	        },
+	        {
+	            label: 'Service',
+	            presets: [
+	                { column: 'aadtyr_1', value: 30.0 },
+	                { column: 'aadtyr_20', value: 0.0 },
+	                { column: 'growth_20', value: 10.0 },
+	                { column: 'trkdyr_1', value: 0.0 },
+	                { column: 'losyr_1', value: 30.0 },
+	                { column: 'losyr_20', value: 30.0 },
+	                { column: 'crash_rate', value: 0.0 },
+	                { column: 'crash_severity', value: 0.0 },
+	                { column: 'weather', value: 0.0 },
+	                { column: 'event', value: 0.0 }
+	            ]
+	        },
+	        {
+	            label: 'Freight Performance',
+	            presets: [
+	                { column: 'aadtyr_1', value: 20.0 },
+	                { column: 'aadtyr_20', value: 0.0 },
+	                { column: 'growth_20', value: 0.0 },
+	                { column: 'trkdyr_1', value: 60.0 },
+	                { column: 'losyr_1', value: 20.0 },
+	                { column: 'losyr_20', value: 0.0 },
+	                { column: 'crash_rate', value: 0.0 },
+	                { column: 'crash_severity', value: 0.0 },
+	                { column: 'weather', value: 0.0 },
+	                { column: 'event', value: 0.0 }
+	            ]
+	        }
+	    ]
+	};
+	exports.tipConfig.$presetSelector.append('<option value="0" disabled=>Custom</option>');
+	var sliders = new Sliders_1.TipSliders(exports.tipConfig.slidersConfig, exports.tipConfig.presetConfig, 'slider-container', exports.tipConfig.$presetSelector, exports.tipConfig.$regionSelector, exports.tipConfig.$regionSelector, function (chg) { console.log(chg); });
+	// sliders.changedCallback = (chg) => {console.log(chg)};
+	window['glob'] = sliders;
+	window['hat'] = sliders;
+	window['bird'] = sliders;
+
+
+/***/ },
+
+/***/ 3:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+	 * 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 ( true ) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+			return jQuery;
+		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+	
+	
+	
+	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;
+	}));
+
+
+/***/ },
+
+/***/ 4:
+/***/ function(module, exports) {
+
+	/**
+	 * Created by gavorhes on 12/10/2015.
+	 */
+	"use strict";
+	/**
+	 * 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;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = provide;
+
+
+/***/ },
+
+/***/ 27:
+/***/ function(module, exports, __webpack_require__) {
+
+	/**
+	 * Created by gavorhes on 12/10/2015.
+	 */
+	"use strict";
+	var provide_1 = __webpack_require__(4);
+	var nm = provide_1.default('collections');
+	var $ = __webpack_require__(3);
+	var TipPresets = (function () {
+	    function TipPresets(conf) {
+	        this.label = conf.label;
+	        this.presets = conf.presets;
+	        this.domId = this.label.replace(/ /g, '').toLowerCase();
+	        var theSum = 0;
+	        for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {
+	            var pr = _a[_i];
+	            theSum += pr.value;
+	        }
+	        if (theSum != 100) {
+	            throw 'preset sum does note equal 100';
+	        }
+	    }
+	    return TipPresets;
+	}());
+	var _Slider = (function () {
+	    /**
+	     * Slider constructor
+	     * @param sliderConfig - the configuration
+	
+	     */
+	    function _Slider(sliderConfig) {
+	        this._dropdownSelection = null;
+	        this._weight = null;
+	        this.name = sliderConfig.label;
+	        this.domId = this.name.toLowerCase().replace(/ /g, '-');
+	        this._locked = false;
+	        this._min = 0.0;
+	        this._max = 100;
+	        this.labelLow = null;
+	        this.labelHigh = null;
+	        this.labelVal = null;
+	        this.slider = null;
+	        this.chk = null;
+	        this.atMin = false;
+	        this.atMax = false;
+	        var sel = "<select class=\"" + (sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select') + "\" id=\"" + this.domId + "_chg\">";
+	        for (var i = 0; i < sliderConfig.yearOptions.length; i++) {
+	            var itm = sliderConfig.yearOptions[i];
+	            sel += "<option value=\"" + itm.column + "\">" + itm.label + "</option>";
+	        }
+	        sel += '</select>';
+	        this.selectedParamDefault = this.selectedParam;
+	        this.html = '<div class="slider-div">' +
+	            ("<label for=\"" + this.domId + "_chk\" class=\"slider-label\">" + this.name + "</label>") +
+	            sel + "<br>" +
+	            ("<input id=\"" + this.domId + "_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">") +
+	            ("<label id=\"" + this.domId + "_low\" class=\"low-high\"></label>") +
+	            ("<input id=\"" + this.domId + "\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">") +
+	            ("<label id=\"" + this.domId + "_high\" class=\"low-high\"></label>") +
+	            ("<label id=\"" + this.domId + "_lbl\" for=\"" + this.domId + "\" class=\"percent-label\"></label></div>");
+	    }
+	    /**
+	     * add html to dom
+	     * @param {jQuery} $container - container element
+	     */
+	    _Slider.prototype.addToDom = function ($container) {
+	        $container.append(this.html);
+	        this.labelLow = $("#" + this.domId + "_low");
+	        this.labelHigh = $("#" + this.domId + "_high");
+	        this.labelVal = $("#" + this.domId + "_lbl");
+	        this.slider = $("#" + this.domId);
+	        this.selectionBox = $("#" + this.domId + "_chg");
+	        this.chk = $("#" + this.domId + "_chk");
+	    };
+	    /**
+	     * increment the slider
+	     * @param {number} delta change delta
+	     * @returns {number} the remainder not able to be allocated to this slider
+	     */
+	    _Slider.prototype.increment = function (delta) {
+	        var remainder = 0;
+	        delta = Number(delta.toFixed(1));
+	        this._weight += delta;
+	        if (this._weight < this._min) {
+	            remainder = this._min - this._weight;
+	            this._weight = this._min;
+	            this.atMin = true;
+	        }
+	        else if (this._weight > this._max) {
+	            remainder = this._max - this._weight;
+	            this._weight = this._max;
+	            this.atMax = true;
+	        }
+	        else {
+	            this.atMin = false;
+	            this.atMax = false;
+	        }
+	        this.slider.val(this._weight.toFixed(1));
+	        this.labelVal.html(this._weight.toFixed(1) + '%');
+	        return remainder;
+	    };
+	    /**
+	     * set the value and drop down
+	     * @param {number} newVal the new value
+	     * @param {string} selectedParam the selected parameter
+	     */
+	    _Slider.prototype.setValAndDropDown = function (newVal, selectedParam) {
+	        this.min = 0;
+	        this.max = 100;
+	        this.weight = newVal;
+	        this.slider.val(newVal.toFixed(1));
+	        this.selectionBox.val(selectedParam);
+	        this.selectedParam = selectedParam;
+	        this.locked = true;
+	    };
+	    Object.defineProperty(_Slider.prototype, "locked", {
+	        /**
+	         *
+	         * @returns {boolean} if locked
+	         */
+	        get: function () {
+	            return this._locked;
+	        },
+	        /**
+	         *
+	         * @param {boolean} val if locked
+	         */
+	        set: function (val) {
+	            this._locked = val;
+	            this.slider.prop('disabled', this._locked);
+	            this.selectionBox.prop('disabled', this._locked);
+	            this.chk.prop('checked', !this._locked);
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(_Slider.prototype, "min", {
+	        /**
+	         *
+	         * @returns {number} the minimum
+	         */
+	        get: function () {
+	            return this._min;
+	        },
+	        /**
+	         *
+	         * @param {number} newVal new minimum
+	         */
+	        set: function (newVal) {
+	            this._min = Number(newVal.toFixed(1));
+	            if (this._min < 0) {
+	                this._min = 0;
+	            }
+	            this.labelLow.html(this._min.toFixed(1));
+	            this.slider.attr('min', this._min.toFixed(1));
+	            this.atMin = this._weight == this._min;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(_Slider.prototype, "max", {
+	        /**
+	         *
+	         * @returns {number} the maximum
+	         */
+	        get: function () {
+	            return this._max;
+	        },
+	        /**
+	         *
+	         * @param {number} newVal the maximum
+	         */
+	        set: function (newVal) {
+	            this._max = Number(newVal.toFixed(1));
+	            if (this._max > 100) {
+	                this._max = 100.0;
+	            }
+	            this.labelHigh.html(this._max.toFixed(1));
+	            this.slider.attr('max', this._max.toFixed(1));
+	            this.atMax = this._weight == this._max;
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    Object.defineProperty(_Slider.prototype, "weight", {
+	        /**
+	         *
+	         * @returns {number} the weight
+	         */
+	        get: function () {
+	            return this._weight;
+	        },
+	        /**
+	         *
+	         * @param {number} newVal the weight
+	         */
+	        set: function (newVal) {
+	            this._weight = Number(newVal.toFixed(1));
+	            this.labelVal.html(this._weight.toFixed(1) + '%');
+	            if (this._weight <= this._min) {
+	                this.atMin = true;
+	                this.atMax = false;
+	            }
+	            else if (this._weight >= this._max) {
+	                this.atMin = false;
+	                this.atMax = true;
+	            }
+	            else {
+	                this.atMin = false;
+	                this.atMax = false;
+	            }
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return _Slider;
+	}());
+	nm._Slider = _Slider;
+	/**
+	 * class to keep track of the sliders
+	 */
+	var TipSliders = (function () {
+	    /**
+	     *
+	     * @param sliderConfigs
+	     * @param presetConfig
+	     * @param divId
+	     * @param presetSelector
+	     * @param regionSelector
+	     * @param versionSelector
+	     * @param chgCallback
+	     */
+	    function TipSliders(sliderConfigs, presetConfig, divId, presetSelector, regionSelector, versionSelector, chgCallback) {
+	        var _this = this;
+	        this.resetting = false;
+	        this.reservedPercent = 0.0;
+	        this.$container = $('#' + divId);
+	        this.$container.addClass('slider-container');
+	        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : function () { };
+	        this._$presetSelector = presetSelector;
+	        this._$regionSelector = regionSelector;
+	        this._$versionSelector = versionSelector;
+	        this._sliderList = [];
+	        this._sliderLookup = {};
+	        for (var i = 0; i < sliderConfigs.length; i++) {
+	            var sld = new _Slider(sliderConfigs[i]);
+	            this._sliderList.push(sld);
+	            this._sliderLookup[sld.domId] = sld;
+	            sld.addToDom(this.$container);
+	        }
+	        this._presetArray = [];
+	        this._presetLookup = {};
+	        for (var i = 0; i < presetConfig.length; i++) {
+	            var preset = new TipPresets(presetConfig[i]);
+	            var idx = (i + 1).toFixed();
+	            this._presetLookup[idx] = preset;
+	            this._presetArray.push(preset);
+	            this._$presetSelector.append("<option value=\"" + idx + "\">" + preset.label + "</option>");
+	        }
+	        this._lockedList = [];
+	        this._inRangeList = [];
+	        this._atMinList = [];
+	        this._atMaxList = [];
+	        this.lockedCount = 10;
+	        this.notLockedCount = 0;
+	        this._splitSliderArray();
+	        this._$presetSelector.change(function () {
+	            _this.setPresetValues();
+	            _this._runChangedCallback();
+	        });
+	        this._$regionSelector.change(function () {
+	            _this._runChangedCallback();
+	        });
+	        this._$versionSelector.change(function () {
+	            _this._runChangedCallback();
+	        });
+	        this._$presetSelector.trigger('change');
+	        this._addEventListeners();
+	    }
+	    TipSliders.prototype._runChangedCallback = function () {
+	        this._changedCallback(this.paramWeightsRegionVersion);
+	    };
+	    Object.defineProperty(TipSliders.prototype, "changedCallback", {
+	        get: function () {
+	            return this._changedCallback;
+	        },
+	        set: function (chg) {
+	            this._changedCallback = chg;
+	            this._runChangedCallback();
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    TipSliders.prototype.setPresetValues = function () {
+	        var thePreset = this._presetLookup[this._$presetSelector.val()];
+	        for (var i = 0; i < thePreset.presets.length; i++) {
+	            var presetValues = thePreset.presets[i];
+	            var theSlider = this._sliderList[i];
+	            theSlider.locked = true;
+	            theSlider.setValAndDropDown(presetValues.value, presetValues.column);
+	        }
+	    };
+	    /**
+	     * split array into subarrays holding the sliders
+	     * @private
+	     */
+	    TipSliders.prototype._splitSliderArray = function () {
+	        this._lockedList = [];
+	        this._inRangeList = [];
+	        this._atMinList = [];
+	        this._atMaxList = [];
+	        for (var i = 0; i < this._sliderList.length; i++) {
+	            var sld = this._sliderList[i];
+	            if (sld.locked) {
+	                this._lockedList.push(sld);
+	            }
+	            else if (sld.atMin) {
+	                this._atMinList.push(sld);
+	            }
+	            else if (sld.atMax) {
+	                this._atMaxList.push(sld);
+	            }
+	            else {
+	                this._inRangeList.push(sld);
+	            }
+	        }
+	        this.lockedCount = this._lockedList.length;
+	        this.notLockedCount = this._sliderList.length - this.lockedCount;
+	    };
+	    /**
+	     * handle remainder, recursive to take care of min max overshoots
+	     * @param {number} remain the remainder
+	     * @param {string} skipDomId - this dom id
+	     * @private
+	     */
+	    TipSliders.prototype._handleRemainder = function (remain, skipDomId) {
+	        remain = Number(remain.toFixed(1));
+	        if (remain == 0) {
+	            return;
+	        }
+	        this._splitSliderArray();
+	        var canChangeArray = [];
+	        for (var i = 0; i < this._inRangeList.length; i++) {
+	            var sld = this._inRangeList[i];
+	            if (sld.domId == skipDomId) {
+	                continue;
+	            }
+	            canChangeArray.push(sld);
+	        }
+	        if (remain > 0) {
+	            for (var i = 0; i < this._atMaxList.length; i++) {
+	                var sld = this._atMaxList[i];
+	                if (sld.domId == skipDomId) {
+	                    continue;
+	                }
+	                canChangeArray.push(sld);
+	            }
+	        }
+	        else {
+	            for (var i = 0; i < this._atMinList.length; i++) {
+	                var sld = this._atMinList[i];
+	                if (sld.domId == skipDomId) {
+	                    continue;
+	                }
+	                canChangeArray.push(sld);
+	            }
+	        }
+	        if (canChangeArray.length == 0) {
+	            return;
+	        }
+	        var inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
+	        var newRemainder = 0;
+	        for (var i = 0; i < canChangeArray.length; i++) {
+	            newRemainder += canChangeArray[i].increment(inc);
+	        }
+	        this._handleRemainder(newRemainder, skipDomId);
+	    };
+	    /**
+	     *
+	     * @param {object} keyValList key and value list
+	     */
+	    TipSliders.prototype.setValues = function (keyValList) {
+	        this.resetting = true;
+	        for (var k in keyValList) {
+	            if (keyValList.hasOwnProperty(k)) {
+	                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
+	            }
+	        }
+	        this.resetting = false;
+	    };
+	    /**
+	     * get the weight sum
+	     * @returns {number} the weight sum
+	     */
+	    TipSliders.prototype.getSum = function () {
+	        var total = 0;
+	        for (var i = 0; i < this._sliderList.length; i++) {
+	            var sld = this._sliderList[i];
+	            total += Number(sld.weight.toFixed(1));
+	        }
+	        return total;
+	    };
+	    /**
+	     * get the parameter weights
+	     * @returns {object} lookup with parameter weights
+	     */
+	    TipSliders.prototype.getParams = function () {
+	        var paramWeights = {};
+	        for (var i = 0; i < this._sliderList.length; i++) {
+	            var sld = this._sliderList[i];
+	            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
+	        }
+	        return paramWeights;
+	    };
+	    TipSliders.prototype._addEventListeners = function () {
+	        var ___this = this;
+	        //change function
+	        this.$container.find('input[type="range"]').change(function () {
+	            if (___this.resetting) {
+	                return;
+	            }
+	            var $this = $(this);
+	            var domId = this['id'];
+	            var sldr = ___this._sliderLookup[domId];
+	            var newValue = parseFloat($this.val());
+	            var oldValue = sldr.weight;
+	            var diff = newValue - oldValue;
+	            diff = Number(diff.toFixed(1));
+	            sldr.weight = Number(newValue.toFixed(1));
+	            ___this._handleRemainder(diff, domId);
+	            //cleanup, make sure the sum is still 100
+	            var sum = Number(___this.getSum().toFixed(1));
+	            if (sum > 100) {
+	                loop1: while (true) {
+	                    for (var i = 0; i < ___this._sliderList.length; i++) {
+	                        var sld = ___this._sliderList[i];
+	                        if (sld.domId == domId || sld.locked || sld.atMin) {
+	                            continue;
+	                        }
+	                        sld.increment(-0.1);
+	                        sum -= 0.1;
+	                        if (sum.toFixed(1) == '100.0') {
+	                            break loop1;
+	                        }
+	                    }
+	                }
+	            }
+	            else if (sum < 100) {
+	                loop1: while (true) {
+	                    for (var i = 0; i < ___this._sliderList.length; i++) {
+	                        var sld = ___this._sliderList[i];
+	                        if (sld.domId == domId || sld.locked || sld.atMax) {
+	                            continue;
+	                        }
+	                        sld.increment(0.1);
+	                        sum += 0.1;
+	                        if (sum.toFixed(1) == '100.0') {
+	                            break loop1;
+	                        }
+	                    }
+	                }
+	            }
+	            ___this._$presetSelector.val('0');
+	            ___this._runChangedCallback();
+	        });
+	        //update the selected parameter when the selection is changed
+	        $('.show-select').change(function () {
+	            if (___this.resetting) {
+	                return;
+	            }
+	            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();
+	            ___this._$presetSelector.val('0');
+	            ___this._runChangedCallback();
+	        });
+	        //lock the slider and update the reserved percent
+	        this.$container.find('input[type="checkbox"]').change(function () {
+	            var domEl = this;
+	            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
+	            ___this.reservedPercent = 0.0;
+	            ___this.notLockedCount = 0;
+	            var notLockedSliders = [];
+	            for (var i = 0; i < ___this._sliderList.length; i++) {
+	                var sld = ___this._sliderList[i];
+	                if (sld.locked) {
+	                    ___this.reservedPercent += sld.weight;
+	                    continue;
+	                }
+	                notLockedSliders.push(sld);
+	                ___this.notLockedCount++;
+	            }
+	            for (var i = 0; i < ___this._sliderList.length; i++) {
+	                var sld = ___this._sliderList[i];
+	                if (sld.locked) {
+	                    continue;
+	                }
+	                sld.max = 100 - ___this.reservedPercent;
+	            }
+	            if (notLockedSliders.length == 1) {
+	                notLockedSliders[0].min = notLockedSliders[0].weight;
+	            }
+	            else {
+	                for (var i = 0; i < notLockedSliders.length; i++) {
+	                    notLockedSliders[i].min = 0;
+	                }
+	            }
+	        });
+	    };
+	    Object.defineProperty(TipSliders.prototype, "paramWeightsRegionVersion", {
+	        get: function () {
+	            return { paramWeights: this.getParams(),
+	                region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() };
+	        },
+	        enumerable: true,
+	        configurable: true
+	    });
+	    return TipSliders;
+	}());
+	exports.TipSliders = TipSliders;
+	nm.Sliders = TipSliders;
+	Object.defineProperty(exports, "__esModule", { value: true });
+	exports.default = TipSliders;
+
+
+/***/ }
+
+/******/ });
+//# sourceMappingURL=slider-test.js.map
\ No newline at end of file
diff --git a/test-html/js/slider-test.js.map b/test-html/js/slider-test.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..b6f45606ec4204382b66ab58393b9f14e17861b8
--- /dev/null
+++ b/test-html/js/slider-test.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap ef760a4c28bc3d5b9fb4?77b8*****","webpack:///./src-ts/_test/slider-test.ts","webpack:///./~/jquery/dist/jquery.js?89fd***","webpack:///./src-ts/util/provide.ts?c446***","webpack:///./src-ts/collections/Sliders.ts"],"names":[],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,YAAY;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF,qBAAoB;;AAEpB;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAiD;AACjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF,iCAAgC;AAChC;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,SAAS;AAClB;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS,YAAY;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,YAAY;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,iBAAgB,IAAI;;AAEpB;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD,UAAS;;AAET;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,OAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;;AAEA;AACA;AACA,YAAW,gBAAgB;AAC3B,cAAa,uBAAuB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,eAAe;AAC1B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,gBAAe;;AAEf,UAAS;;AAET;AACA,SAAQ,iCAAiC;AACzC,SAAQ,oBAAoB;AAC5B,SAAQ,sCAAsC;AAC9C,SAAQ;AACR,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,iBAAgB,aAAa,EAAE;AAC/B;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,6DAA4D;;AAE5D;AACA;AACA;AACA,0CAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAO;AACP;AACA;AACA;AACA;AACA,8DAA6D;;AAE7D;AACA;AACA;AACA,2CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iEAAgE;;AAEhE;AACA;AACA;AACA,8CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,kEAAiE,UAAU;AAC3E,uCAAsC,2BAA2B;AACjE;AACA,iCAAgC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,UAAU;AACpB;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,WAAU,cAAc;AACxB;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA,aAAY,uEAAuE;AACnF;AACA;AACA,aAAY,4BAA4B;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,4DAA2D;;AAE3D;AACA;AACA,qFAAoF;;AAEpF;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,SAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,SAAQ,SAAS;AACjB;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC,iDAAiD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAiD;AACjD,WAAU,wCAAwC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,gBAAgB;AAC3B;AACA,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA,EAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,SAAQ,GAAG;AACX;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,OAAO;AAChB,0BAAyB,wBAAwB;;AAEjD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA,2CAA0C;AAC1C,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;AACD;;;;AAIA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAU,cAAc;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA,QAAO;AACP,OAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,QAAO;AACP;AACA,OAAM;AACN,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,+CAA8C;AAC9C,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA,KAAI;;AAEJ;;AAEA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAuB,aAAa;AACpC,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,SAAS;AAC7B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,GAAE;AACF;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;;AAEA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAe,oBAAoB,EAAE;AACrC,gBAAe,qCAAqC,EAAE;AACtD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,uBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE,gBAAgB;AAClB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gEAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,cAAc;;AAExB;AACA;AACA;AACA;AACA,kBAAiB,mBAAmB;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,+BAA+B;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wDAAwD;AAC/E;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA,cAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAsC,cAAc;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAU,OAAO;AACjB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,UAAS,qCAAqC;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA,UAAS,8BAA8B;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS,WAAW;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC,UAAU,SAAS,MAAM,aAAa;AAC3E,cAAa,eAAe;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,2BAA2B,sBAAsB;AACnF,uBAAsB,cAAc;AACpC,iBAAgB,WAAW,YAAY;AACvC,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA4B,SAAS,QAAQ,QAAQ;AACrD;;AAEA;AACA;AACA,qCAAoC,uBAAuB;AAC3D,oBAAmB,SAAS,SAAS;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;AACF,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA,aAAY,+DAA+D;AAC3E;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAQ,OAAO;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA,OAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA,WAAU,OAAO;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;;AAEA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA,SAAQ,QAAQ;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAQ,gBAAgB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,kDAAiD;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAU,iBAAiB;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,4BAA2B;AAC3B;AACA,sBAAqB;AACrB;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,iBAAiB;AAC5B;AACA;;AAEA,8CAA6C;AAC7C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA,SAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,UAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,EAAC;;AAED;AACA,kEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAoB,cAAc;AAClC,GAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,kDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA+B,SAAS;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAU,kBAAkB;AAC5B,YAAW,kBAAkB;AAC7B,eAAc;AACd,EAAC;AACD;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAQ,mBAAmB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;;AAEA,kCAAiC;AACjC;AACA;;AAEA,KAAI;AACJ;;AAEA,KAAI;AACJ;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAW,SAAS;AACpB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;;AAEA;;AAEA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA8C;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA,WAAU,KAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,qCAAqC;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,iBAAgB;;AAEhB,iDAAgD;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yDAAwD;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAM;AACN;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAiB;AACjB,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAkC;;AAElC;AACA,uBAAsB;AACtB,4BAA2B;;AAE3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAc,oCAAoC;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;;AAEA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc;AACd,OAAM;AACN,OAAM;AACN,IAAG;AACH;AACA,EAAC;;;AAGD;AACA;AACA;AACA,GAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ;;AAER;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA,oDAAmD;AACnD;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,uBAAuB;AAClC,YAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;AAKD;AACA;AACA;AACA,GAAE;AACF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,WAAU,kBAAkB;AAC5B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;;AAEnB,6DAA4D,eAAe;AAC3E;AACA;;AAEA;AACA;;AAEA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA,eAAc,sDAAsD;AACpE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAI;AACJ;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;AAGD;AACA,eAAc,mCAAmC;AACjD,gBAAe,6DAA6D;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA,GAAE;AACF,EAAC;;;AAGD;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,EAAC;;AAED;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;;;;AAIA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;;ACjnTD;;IAEG;;AAGH;;;;IAIG;AACH,kBAAiB,SAAS;KACtB,YAAY,CAAC;KACb,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAC;SACpC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;KACtB,CAAC;KAED,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACjC,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;KAE7B,GAAG,CAAC,CAAC,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;SAChC,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAEpC,EAAE,CAAC,CAAC,OAAO,SAAS,IAAI,WAAW,CAAC,EAAC;aACjC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SAC7B,CAAC;SAED,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC,CAAC;KAED,MAAM,CAAC,SAAS,CAAC;AACrB,EAAC;AAED,QAAO,CAAC,MAAM,CAAC,CAAC;AAChB,OAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAEpC;mBAAe,OAAO,CAAC;;;;;;;;ACnCvB;;IAEG;;AAGH,qCAAoB,CAAiB,CAAC;AACtC,KAAI,EAAE,GAAG,iBAAO,CAAC,aAAa,CAAC,CAAC;AAChC,KAAM,CAAC,GAAG,mBAAO,CAAC,CAAQ,CAAC,CAAC;AAuB5B;KAKI,oBAAY,IAAqB;SAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;SAExD,IAAI,MAAM,GAAG,CAAC,CAAC;SAEf,GAAG,CAAC,CAAW,UAAY,EAAZ,SAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY,CAAC;aAAvB,IAAI,EAAE;aACP,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC;UACtB;SAED,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,EAAC;aACf,MAAM,gCAAgC,CAAC;SAC3C,CAAC;KACL,CAAC;KACL,iBAAC;AAAD,EAAC;AAGD;KAuBI;;;;QAIG;KACH,iBAAY,YAA6B;SACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACpB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC;SAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAExD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SAErB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SAChB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;SAEhB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;SAEhB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SAGnB,IAAI,GAAG,GAAG,sBAAkB,YAAY,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,GAAG,aAAa,iBAAS,IAAI,CAAC,KAAK,YAAQ,CAAC;SAE9H,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aACvD,IAAI,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,IAAI,qBAAkB,GAAG,CAAC,MAAM,WAAK,GAAG,CAAC,KAAK,cAAW,CAAC;SACjE,CAAC;SACD,GAAG,IAAI,WAAW,CAAC;SAEnB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC;SAE/C,IAAI,CAAC,IAAI,GAAG,0BAA0B;aAClC,mBAAe,IAAI,CAAC,KAAK,sCAA8B,IAAI,CAAC,IAAI,cAAU;aAC1E,GAAG,GAAG,MAAM;aACZ,kBAAc,IAAI,CAAC,KAAK,4DAAmD;aAC3E,kBAAc,IAAI,CAAC,KAAK,wCAAiC;aACzD,kBAAc,IAAI,CAAC,KAAK,wEAAyD;aACjF,kBAAc,IAAI,CAAC,KAAK,yCAAkC;aAC1D,kBAAc,IAAI,CAAC,KAAK,qBAAc,IAAI,CAAC,KAAK,+CAAwC,CAAC;KACjG,CAAC;KAED;;;QAGG;KACH,0BAAQ,GAAR,UAAS,UAAU;SACf,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,KAAK,SAAM,CAAC,CAAC;SACxC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,KAAK,UAAO,CAAC,CAAC;SAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,KAAK,SAAM,CAAC,CAAC;SACxC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,KAAO,CAAC,CAAC;SAClC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,KAAK,SAAM,CAAC,CAAC;SAC5C,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,KAAK,SAAM,CAAC,CAAC;KACvC,CAAC;KAED;;;;QAIG;KACH,2BAAS,GAAT,UAAU,KAAK;SACX,IAAI,SAAS,GAAG,CAAC,CAAC;SAClB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAEjC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;SACtB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3B,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;aACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;aACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACtB,CAAC;SAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAClC,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;aACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;aACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACtB,CAAC;SAAC,IAAI,CAAC,CAAC;aACJ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACvB,CAAC;SAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;SAElD,MAAM,CAAC,SAAS,CAAC;KACrB,CAAC;KAED;;;;QAIG;KACH,mCAAiB,GAAjB,UAAkB,MAAc,EAAE,aAAqB;SACnD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;SACb,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;SACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;SACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;SACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;KAMD,sBAAI,2BAAM;SAJV;;;YAGG;cACH;aACI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACxB,CAAC;SAED;;;YAGG;cACH,UAAW,GAAG;aACV,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;aACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5C,CAAC;;;QAXA;KAiBD,sBAAI,wBAAG;SAJP;;;YAGG;cACH;aACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACrB,CAAC;SAED;;;YAGG;cACH,UAAQ,MAAM;aACV,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;iBAChB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;aAClB,CAAC;aACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;SAC3C,CAAC;;;QAdA;KAoBD,sBAAI,wBAAG;SAJP;;;YAGG;cACH;aACI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACrB,CAAC;SAED;;;YAGG;cACH,UAAQ,MAAM;aACV,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;iBAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;aACtB,CAAC;aACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;SAC3C,CAAC;;;QAdA;KAoBD,sBAAI,2BAAM;SAJV;;;YAGG;cACH;aACI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACxB,CAAC;SAED;;;YAGG;cACH,UAAW,MAAM;aACb,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;aAClD,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;iBAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACvB,CAAC;aAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACtB,CAAC;aAAC,IAAI,CAAC,CAAC;iBACJ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACvB,CAAC;SACL,CAAC;;;QAnBA;KAoBL,cAAC;AAAD,EAAC;AAED,GAAE,CAAC,OAAO,GAAG,OAAO,CAAC;AAGrB;;IAEG;AACH;KAuBI;;;;;;;;;QASG;KACH,oBAAY,aAAqC,EAAE,YAAoC,EAC3E,KAAa,EAAE,cAAsB,EAAE,cAAsB,EAAE,eAAuB,EACtF,WAA4B;SAnC5C,iBAmXC;SA9UO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACvB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;SAC3B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;SACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;SAE7C,IAAI,CAAC,gBAAgB,GAAG,OAAO,WAAW,IAAI,UAAU,GAAG,WAAW,GAAG,cAAO,CAAC,CAAC;SAElF,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC;SACvC,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC;SACvC,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC;SAEzC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;SAExB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAC5C,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aACpC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAClC,CAAC;SAED,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;SAExB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAC3C,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aAE7C,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAE5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;aACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC/B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,qBAAkB,GAAG,WAAK,MAAM,CAAC,KAAK,cAAW,CAAC,CAAC;SACpF,CAAC;SAGD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SAErB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACtB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;SAExB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAGzB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;aACzB,KAAI,CAAC,eAAe,EAAE,CAAC;aACvB,KAAI,CAAC,mBAAmB,EAAE,CAAC;SAC/B,CAAC,CAAC,CAAC;SAEH,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;aACzB,KAAI,CAAC,mBAAmB,EAAE,CAAC;SAC/B,CAAC,CAAC,CAAC;SAEH,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;aAC1B,KAAI,CAAC,mBAAmB,EAAE,CAAC;SAC/B,CAAC,CAAC,CAAC;SAEH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAExC,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC9B,CAAC;KAED,wCAAmB,GAAnB;SACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;KAC1D,CAAC;KAED,sBAAI,uCAAe;cAAnB;aACI,MAAM,CAAC,IAAI,CAAC,gBAAgB;SAChC,CAAC;cAED,UAAoB,GAAmB;aACnC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;aAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC/B,CAAC;;;QALA;KAOD,oCAAe,GAAf;SACI,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;SAEhE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAChD,IAAI,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACxC,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAEpC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;aACxB,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;SACzE,CAAC;KACL,CAAC;KAED;;;QAGG;KACH,sCAAiB,GAAjB;SACI,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SAErB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAE9B,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;iBACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC/B,CAAC;aAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;iBACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC9B,CAAC;aAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;iBACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC9B,CAAC;aAAC,IAAI,CAAC,CAAC;iBACJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAChC,CAAC;SACL,CAAC;SACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;SAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;KACrE,CAAC;KAED;;;;;QAKG;KACH,qCAAgB,GAAhB,UAAiB,MAAM,EAAE,SAAS;SAE9B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACnC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;aACd,MAAM,CAAC;SACX,CAAC;SAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAEzB,IAAI,cAAc,GAAG,EAAE,CAAC;SACxB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAChD,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAC/B,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;iBACzB,QAAQ,CAAC;aACb,CAAC;aACD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B,CAAC;SAED,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;aACb,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;iBAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAC7B,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;qBACzB,QAAQ,CAAC;iBACb,CAAC;iBACD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC7B,CAAC;SACL,CAAC;SAAC,IAAI,CAAC,CAAC;aACJ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;iBAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAC7B,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;qBACzB,QAAQ,CAAC;iBACb,CAAC;iBACD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC7B,CAAC;SACL,CAAC;SAED,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;aAC7B,MAAM,CAAC;SACX,CAAC;SAED,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAEnE,IAAI,YAAY,GAAG,CAAC,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAC7C,YAAY,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACrD,CAAC;SAED,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;KACnD,CAAC;KAED;;;QAGG;KACH,8BAAS,GAAT,UAAU,UAAU;SAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACtB,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;aACvB,EAAE,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChF,CAAC;SACL,CAAC;SACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC3B,CAAC;KAED;;;QAGG;KACH,2BAAM,GAAN;SACI,IAAI,KAAK,GAAG,CAAC,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC9B,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C,CAAC;SAED,MAAM,CAAC,KAAK,CAAC;KACjB,CAAC;KAED;;;QAGG;KACH,8BAAS,GAAT;SACI,IAAI,YAAY,GAAG,EAAE,CAAC;SACtB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;aAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC9B,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACpE,CAAC;SAED,MAAM,CAAC,YAAY,CAAC;KACxB,CAAC;KAED,uCAAkB,GAAlB;SACI,IAAI,OAAO,GAAG,IAAI,CAAC;SAGnB,iBAAiB;SACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC;aAC3C,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;iBACpB,MAAM,CAAC;aACX,CAAC;aAED,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;aACpB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAExC,IAAI,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;aAEvC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B,IAAI,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC;aAC/B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAE/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAE1C,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAEtC,yCAAyC;aACzC,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAE9C,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;iBACZ,KAAK,EACD,OAAO,IAAI,EAAE,CAAC;qBACV,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;yBAClD,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;yBACjC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;6BAChD,QAAQ,CAAC;yBACb,CAAC;yBACD,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;yBACpB,GAAG,IAAI,GAAG,CAAC;yBACX,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;6BAC5B,KAAK,CAAC,KAAK,CAAC;yBAChB,CAAC;qBACL,CAAC;iBACL,CAAC;aACT,CAAC;aAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;iBACnB,KAAK,EACD,OAAO,IAAI,EAAE,CAAC;qBACV,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;yBAClD,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;yBACjC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;6BAChD,QAAQ,CAAC;yBACb,CAAC;yBACD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;yBACnB,GAAG,IAAI,GAAG,CAAC;yBACX,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;6BAC5B,KAAK,CAAC,KAAK,CAAC;yBAChB,CAAC;qBACL,CAAC;iBACL,CAAC;aACT,CAAC;aAED,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAClC,OAAO,CAAC,mBAAmB,EAAE,CAAC;SAClC,CAAC,CACJ,CAAC;SAEF,6DAA6D;SAC7D,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;aACrB,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;iBACpB,MAAM,CAAC;aACX,CAAC;aACD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;aAEpF,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAElC,OAAO,CAAC,mBAAmB,EAAE,CAAC;SAElC,CAAC,CAAC,CAAC;SAEH,iDAAiD;SACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC;aAClD,IAAI,KAAK,GAAG,IAAI,CAAC;aAEjB,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;aAC5E,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC;aAC9B,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;aAE3B,IAAI,gBAAgB,GAAG,EAAE,CAAC;aAE1B,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;iBAClD,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACjC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;qBACb,OAAO,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC;qBACtC,QAAQ,CAAC;iBACb,CAAC;iBACD,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;aAC7B,CAAC;aAED,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;iBAClD,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACjC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;qBACb,QAAQ,CAAC;iBACb,CAAC;iBACD,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC;aAC5C,CAAC;aAED,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC/B,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aACzD,CAAC;aAAC,IAAI,CAAC,CAAC;iBACJ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;qBAC/C,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;iBAChC,CAAC;aACL,CAAC;SACL,CAAC,CAAC,CAAC;KAEP,CAAC;KAED,sBAAI,iDAAyB;cAA7B;aACI,MAAM,CAAC,EAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE;iBAClC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAY,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAY,EAAC;SACzG,CAAC;;;QAAA;KACL,iBAAC;AAAD,EAAC;AAnXY,mBAAU,aAmXtB;AAED,GAAE,CAAC,OAAO,GAAG,UAAU,CAAC;AACxB;mBAAe,UAAU,CAAC","file":"slider-test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ef760a4c28bc3d5b9fb4\n **/","/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../collections/Sliders';\r\nconst $ = require('jquery');\r\nimport {ol} from 'custom-ol';\r\n\r\n\r\n\r\nexport interface ITipConfig{\r\n    slidersConfig: Array<TipSliderConfig>;\r\n    presetConfig: Array<TipPresetConfig>;\r\n    tipSegmentLayerMinZoom: number;\r\n    sliders: TipSliders;\r\n    _map: ol.Map;\r\n    $loadingGif: JQuery;\r\n    $presetSelector: JQuery;\r\n    $regionSelector: JQuery;\r\n    $versionSelector: JQuery;\r\n    itsLayerCollection: any;\r\n    tipSegmentLayer: any;\r\n    metamanagerSegments: any;\r\n}\r\n\r\nexport const tipConfig = {\r\n    $loadingGif: $('#loading-gif'),\r\n    $presetSelector: $('#preset-selector'),\r\n    $regionSelector: $('#region-selector'),\r\n    $versionSelector: $('#version-selector'),\r\n    tipSegmentLayerMinZoom: 10,\r\n    slidersConfig: [\r\n            {\r\n                label: 'AADT',\r\n                yearOptions: [\r\n                    {label: '1', column: 'aadtyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'AADT Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'aadtyr_5'},\r\n                    {label: '10', column: 'aadtyr_10'},\r\n                    {label: '15', column: 'aadtyr_15'},\r\n                    {label: '20', column: 'aadtyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Growth',\r\n                yearOptions: [\r\n                    {label: '5', column: 'growth_5'},\r\n                    {label: '10', column: 'growth_10'},\r\n                    {label: '15', column: 'growth_15'},\r\n                    {label: '20', column: 'growth_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Truck',\r\n                yearOptions: [\r\n                    {label: '1', column: 'trkdyr_1'},\r\n                    {label: '20', column: 'trkdyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS',\r\n                yearOptions: [\r\n                    {label: '1', column: 'losyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'losyr_5'},\r\n                    {label: '10', column: 'losyr_10'},\r\n                    {label: '15', column: 'losyr_15'},\r\n                    {label: '20', column: 'losyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Crash Rate',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_rate'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Severity',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_severity'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Weather',\r\n                yearOptions: [\r\n                    {label: 1, column: 'weather'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Event',\r\n                yearOptions: [\r\n                    {label: 1, column: 'event'}\r\n                ]\r\n            }\r\n        ] as Array<TipSliderConfig>,\r\n    presetConfig: [\r\n            {\r\n                label: 'Default TIP',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 10.0},\r\n                    {column: 'aadtyr_20', value: 7.0},\r\n                    {column: 'growth_20', value: 7.0},\r\n                    {column: 'trkdyr_1', value: 4.0},\r\n                    {column: 'losyr_1', value: 12.0},\r\n                    {column: 'losyr_20', value: 12.0},\r\n                    {column: 'crash_rate', value: 15.0},\r\n                    {column: 'crash_severity', value: 13.0},\r\n                    {column: 'weather', value: 9.0},\r\n                    {column: 'event', value: 11.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Safety',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 40.0},\r\n                    {column: 'crash_severity', value: 40.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Present',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 25.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 25.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Future',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 0.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 25.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 25.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Service',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 30.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 10.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 30.0},\r\n                    {column: 'losyr_20', value: 30.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Freight Performance',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 60.0},\r\n                    {column: 'losyr_1', value: 20.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            }\r\n        ] as Array<TipPresetConfig>\r\n\r\n} as ITipConfig;\r\n\r\ntipConfig.$presetSelector.append('<option value=\"0\" disabled=>Custom</option>');\r\n\r\nlet sliders = new TipSliders(tipConfig.slidersConfig, tipConfig.presetConfig, 'slider-container',\r\n    tipConfig.$presetSelector, tipConfig.$regionSelector, tipConfig.$regionSelector, (chg) => {console.log(chg)});\r\n\r\n// sliders.changedCallback = (chg) => {console.log(chg)};\r\n\r\nwindow['glob'] = sliders;\r\nwindow['hat'] = sliders;\r\nwindow['bird'] = sliders;\r\n\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/_test/slider-test.ts\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jquery/dist/jquery.js\n ** module id = 3\n ** module chunks = 1 2 3 5 6\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\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/util/provide.ts\n **/","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nlet nm = provide('collections');\r\nconst $ = require('jquery');\r\n\r\nexport interface TipSliderConfig {\r\n    label: string;\r\n    yearOptions: Array<{column: string, label: string}>\r\n}\r\n\r\nexport interface TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>\r\n}\r\n\r\nexport interface ChangeResponse{\r\n    paramWeights: Object;\r\n    region: string;\r\n    mmVersion: string;\r\n}\r\n\r\nexport interface ChangeCallback{\r\n    (chg: ChangeResponse): any\r\n}\r\n\r\n\r\nclass TipPresets implements TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>;\r\n    domId: string;\r\n\r\n    constructor(conf: TipPresetConfig) {\r\n        this.label = conf.label;\r\n        this.presets = conf.presets;\r\n        this.domId = this.label.replace(/ /g, '').toLowerCase();\r\n\r\n        let theSum = 0;\r\n\r\n        for (let pr of this.presets){\r\n            theSum += pr.value;\r\n        }\r\n\r\n        if (theSum != 100){\r\n            throw 'preset sum does note equal 100';\r\n        }\r\n    }\r\n}\r\n\r\n\r\nclass _Slider {\r\n    _min: number;\r\n    _max: number;\r\n    _locked: boolean;\r\n    atMin: boolean;\r\n    atMax: boolean;\r\n    _weightDefault: number;\r\n    _weight: number;\r\n    html: string;\r\n    domId: string;\r\n    name: string;\r\n\r\n    labelLow: JQuery;\r\n    labelHigh: JQuery;\r\n    labelVal: JQuery;\r\n    slider: JQuery;\r\n    selectionBox: JQuery;\r\n    chk: JQuery;\r\n\r\n    selectedParam: any;\r\n    selectedParamDefault: any;\r\n    _dropdownSelection: string;\r\n\r\n    /**\r\n     * Slider constructor\r\n     * @param sliderConfig - the configuration\r\n\r\n     */\r\n    constructor(sliderConfig: TipSliderConfig) {\r\n        this._dropdownSelection = null;\r\n        this._weight = null;\r\n        this.name = sliderConfig.label;\r\n        this.domId = this.name.toLowerCase().replace(/ /g, '-');\r\n\r\n        this._locked = false;\r\n\r\n        this._min = 0.0;\r\n        this._max = 100;\r\n\r\n        this.labelLow = null;\r\n        this.labelHigh = null;\r\n        this.labelVal = null;\r\n        this.slider = null;\r\n        this.chk = null;\r\n\r\n        this.atMin = false;\r\n        this.atMax = false;\r\n\r\n\r\n        let sel = `<select class=\"${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}\" id=\"${this.domId}_chg\">`;\r\n\r\n        for (let i = 0; i < sliderConfig.yearOptions.length; i++) {\r\n            let itm = sliderConfig.yearOptions[i];\r\n            sel += `<option value=\"${itm.column}\">${itm.label}</option>`;\r\n        }\r\n        sel += '</select>';\r\n\r\n        this.selectedParamDefault = this.selectedParam;\r\n\r\n        this.html = '<div class=\"slider-div\">' +\r\n            `<label for=\"${this.domId}_chk\" class=\"slider-label\">${this.name}</label>` +\r\n            sel + `<br>` +\r\n            `<input id=\"${this.domId}_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">` +\r\n            `<label id=\"${this.domId}_low\" class=\"low-high\"></label>` +\r\n            `<input id=\"${this.domId}\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">` +\r\n            `<label id=\"${this.domId}_high\" class=\"low-high\"></label>` +\r\n            `<label id=\"${this.domId}_lbl\" for=\"${this.domId}\" class=\"percent-label\"></label></div>`;\r\n    }\r\n\r\n    /**\r\n     * add html to dom\r\n     * @param {jQuery} $container - container element\r\n     */\r\n    addToDom($container) {\r\n        $container.append(this.html);\r\n        this.labelLow = $(`#${this.domId}_low`);\r\n        this.labelHigh = $(`#${this.domId}_high`);\r\n        this.labelVal = $(`#${this.domId}_lbl`);\r\n        this.slider = $(`#${this.domId}`);\r\n        this.selectionBox = $(`#${this.domId}_chg`);\r\n        this.chk = $(`#${this.domId}_chk`);\r\n    }\r\n\r\n    /**\r\n     * increment the slider\r\n     * @param {number} delta change delta\r\n     * @returns {number} the remainder not able to be allocated to this slider\r\n     */\r\n    increment(delta) {\r\n        let remainder = 0;\r\n        delta = Number(delta.toFixed(1));\r\n\r\n        this._weight += delta;\r\n        if (this._weight < this._min) {\r\n            remainder = this._min - this._weight;\r\n            this._weight = this._min;\r\n            this.atMin = true;\r\n        } else if (this._weight > this._max) {\r\n            remainder = this._max - this._weight;\r\n            this._weight = this._max;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n\r\n        this.slider.val(this._weight.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n\r\n        return remainder;\r\n    }\r\n\r\n    /**\r\n     * set the value and drop down\r\n     * @param {number} newVal the new value\r\n     * @param {string} selectedParam the selected parameter\r\n     */\r\n    setValAndDropDown(newVal: number, selectedParam: string) {\r\n        this.min = 0;\r\n        this.max = 100;\r\n        this.weight = newVal;\r\n        this.slider.val(newVal.toFixed(1));\r\n        this.selectionBox.val(selectedParam);\r\n        this.selectedParam = selectedParam;\r\n        this.locked = true;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {boolean} if locked\r\n     */\r\n    get locked() {\r\n        return this._locked;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {boolean} val if locked\r\n     */\r\n    set locked(val) {\r\n        this._locked = val;\r\n        this.slider.prop('disabled', this._locked);\r\n        this.selectionBox.prop('disabled', this._locked);\r\n        this.chk.prop('checked', !this._locked);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the minimum\r\n     */\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal new minimum\r\n     */\r\n    set min(newVal) {\r\n        this._min = Number(newVal.toFixed(1));\r\n        if (this._min < 0) {\r\n            this._min = 0;\r\n        }\r\n        this.labelLow.html(this._min.toFixed(1));\r\n        this.slider.attr('min', this._min.toFixed(1));\r\n        this.atMin = this._weight == this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the maximum\r\n     */\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the maximum\r\n     */\r\n    set max(newVal) {\r\n        this._max = Number(newVal.toFixed(1));\r\n        if (this._max > 100) {\r\n            this._max = 100.0;\r\n        }\r\n        this.labelHigh.html(this._max.toFixed(1));\r\n        this.slider.attr('max', this._max.toFixed(1));\r\n        this.atMax = this._weight == this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the weight\r\n     */\r\n    get weight() {\r\n        return this._weight;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the weight\r\n     */\r\n    set weight(newVal) {\r\n        this._weight = Number(newVal.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n        if (this._weight <= this._min) {\r\n            this.atMin = true;\r\n            this.atMax = false;\r\n        } else if (this._weight >= this._max) {\r\n            this.atMin = false;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n    }\r\n}\r\n\r\nnm._Slider = _Slider;\r\n\r\n\r\n/**\r\n * class to keep track of the sliders\r\n */\r\nexport class TipSliders {\r\n    $container: JQuery;\r\n    reservedPercent: number;\r\n    total: number;\r\n    lockedCount: number;\r\n    notLockedCount: number;\r\n    private _sliderList: Array<_Slider>;\r\n    private _sliderLookup: {[s: string]: _Slider};\r\n    private resetting: boolean;\r\n    private _changedCallback: ChangeCallback;\r\n\r\n    private _lockedList: Array<_Slider>;\r\n    private _inRangeList: Array<_Slider>;\r\n    private _atMinList: Array<_Slider>;\r\n    private _atMaxList: Array<_Slider>;\r\n\r\n    private _presetArray: Array<TipPresets>;\r\n    private _presetLookup: {[s: string]: TipPresets};\r\n\r\n    private _$presetSelector: JQuery;\r\n    private _$regionSelector: JQuery;\r\n    private _$versionSelector: JQuery;\r\n\r\n    /**\r\n     *\r\n     * @param sliderConfigs\r\n     * @param presetConfig\r\n     * @param divId\r\n     * @param presetSelector\r\n     * @param regionSelector\r\n     * @param versionSelector\r\n     * @param chgCallback\r\n     */\r\n    constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>,\r\n                divId: string, presetSelector: JQuery, regionSelector: JQuery, versionSelector: JQuery,\r\n                chgCallback?: ChangeCallback) {\r\n\r\n        this.resetting = false;\r\n        this.reservedPercent = 0.0;\r\n        this.$container = $('#' + divId);\r\n        this.$container.addClass('slider-container');\r\n\r\n        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : () => {};\r\n\r\n        this._$presetSelector = presetSelector;\r\n        this._$regionSelector = regionSelector;\r\n        this._$versionSelector = versionSelector;\r\n\r\n        this._sliderList = [];\r\n        this._sliderLookup = {};\r\n\r\n        for (let i = 0; i < sliderConfigs.length; i++) {\r\n            let sld = new _Slider(sliderConfigs[i]);\r\n            this._sliderList.push(sld);\r\n            this._sliderLookup[sld.domId] = sld;\r\n            sld.addToDom(this.$container);\r\n        }\r\n\r\n        this._presetArray = [];\r\n        this._presetLookup = {};\r\n\r\n        for (let i = 0; i < presetConfig.length; i++) {\r\n            let preset = new TipPresets(presetConfig[i]);\r\n\r\n            let idx = (i + 1).toFixed();\r\n\r\n            this._presetLookup[idx] = preset;\r\n            this._presetArray.push(preset);\r\n            this._$presetSelector.append(`<option value=\"${idx}\">${preset.label}</option>`);\r\n        }\r\n\r\n\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        this.lockedCount = 10;\r\n        this.notLockedCount = 0;\r\n\r\n        this._splitSliderArray();\r\n\r\n\r\n        this._$presetSelector.change(() => {\r\n            this.setPresetValues();\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$regionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$versionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$presetSelector.trigger('change');\r\n\r\n        this._addEventListeners();\r\n    }\r\n\r\n    _runChangedCallback(){\r\n        this._changedCallback(this.paramWeightsRegionVersion);\r\n    }\r\n\r\n    get changedCallback(): ChangeCallback{\r\n        return this._changedCallback\r\n    }\r\n\r\n    set changedCallback(chg: ChangeCallback){\r\n        this._changedCallback = chg;\r\n        this._runChangedCallback();\r\n    }\r\n\r\n    setPresetValues() {\r\n        let thePreset = this._presetLookup[this._$presetSelector.val()];\r\n\r\n        for (let i = 0; i < thePreset.presets.length; i++) {\r\n            let presetValues = thePreset.presets[i];\r\n            let theSlider = this._sliderList[i];\r\n\r\n            theSlider.locked = true;\r\n            theSlider.setValAndDropDown(presetValues.value, presetValues.column);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * split array into subarrays holding the sliders\r\n     * @private\r\n     */\r\n    _splitSliderArray() {\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n\r\n            if (sld.locked) {\r\n                this._lockedList.push(sld);\r\n            } else if (sld.atMin) {\r\n                this._atMinList.push(sld);\r\n            } else if (sld.atMax) {\r\n                this._atMaxList.push(sld);\r\n            } else {\r\n                this._inRangeList.push(sld);\r\n            }\r\n        }\r\n        this.lockedCount = this._lockedList.length;\r\n        this.notLockedCount = this._sliderList.length - this.lockedCount;\r\n    }\r\n\r\n    /**\r\n     * handle remainder, recursive to take care of min max overshoots\r\n     * @param {number} remain the remainder\r\n     * @param {string} skipDomId - this dom id\r\n     * @private\r\n     */\r\n    _handleRemainder(remain, skipDomId) {\r\n\r\n        remain = Number(remain.toFixed(1));\r\n        if (remain == 0) {\r\n            return;\r\n        }\r\n\r\n        this._splitSliderArray();\r\n\r\n        let canChangeArray = [];\r\n        for (let i = 0; i < this._inRangeList.length; i++) {\r\n            let sld = this._inRangeList[i];\r\n            if (sld.domId == skipDomId) {\r\n                continue;\r\n            }\r\n            canChangeArray.push(sld);\r\n        }\r\n\r\n        if (remain > 0) {\r\n            for (let i = 0; i < this._atMaxList.length; i++) {\r\n                let sld = this._atMaxList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        } else {\r\n            for (let i = 0; i < this._atMinList.length; i++) {\r\n                let sld = this._atMinList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        }\r\n\r\n        if (canChangeArray.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));\r\n\r\n        let newRemainder = 0;\r\n        for (let i = 0; i < canChangeArray.length; i++) {\r\n            newRemainder += canChangeArray[i].increment(inc);\r\n        }\r\n\r\n        this._handleRemainder(newRemainder, skipDomId);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} keyValList key and value list\r\n     */\r\n    setValues(keyValList) {\r\n        this.resetting = true;\r\n        for (let k in keyValList) {\r\n            if (keyValList.hasOwnProperty(k)) {\r\n                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);\r\n            }\r\n        }\r\n        this.resetting = false;\r\n    }\r\n\r\n    /**\r\n     * get the weight sum\r\n     * @returns {number} the weight sum\r\n     */\r\n    getSum() {\r\n        let total = 0;\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            total += Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return total;\r\n    }\r\n\r\n    /**\r\n     * get the parameter weights\r\n     * @returns {object} lookup with parameter weights\r\n     */\r\n    getParams() {\r\n        let paramWeights = {};\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return paramWeights;\r\n    }\r\n\r\n    _addEventListeners() {\r\n        let ___this = this;\r\n\r\n\r\n        //change function\r\n        this.$container.find('input[type=\"range\"]').change(function () {\r\n                if (___this.resetting) {\r\n                    return;\r\n                }\r\n\r\n                let $this = $(this);\r\n                let domId = this['id'];\r\n                let sldr = ___this._sliderLookup[domId];\r\n\r\n                let newValue = parseFloat($this.val());\r\n\r\n                let oldValue = sldr.weight;\r\n                let diff = newValue - oldValue;\r\n                diff = Number(diff.toFixed(1));\r\n\r\n                sldr.weight = Number(newValue.toFixed(1));\r\n\r\n                ___this._handleRemainder(diff, domId);\r\n\r\n                //cleanup, make sure the sum is still 100\r\n                let sum = Number(___this.getSum().toFixed(1));\r\n\r\n                if (sum > 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMin) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(-0.1);\r\n                                sum -= 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                } else if (sum < 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMax) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(0.1);\r\n                                sum += 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                }\r\n\r\n                ___this._$presetSelector.val('0');\r\n                ___this._runChangedCallback();\r\n            }\r\n        );\r\n\r\n        //update the selected parameter when the selection is changed\r\n        $('.show-select').change(function () {\r\n            if (___this.resetting) {\r\n                return;\r\n            }\r\n            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();\r\n\r\n            ___this._$presetSelector.val('0');\r\n\r\n            ___this._runChangedCallback();\r\n\r\n        });\r\n\r\n        //lock the slider and update the reserved percent\r\n        this.$container.find('input[type=\"checkbox\"]').change(function () {\r\n            let domEl = this;\r\n\r\n            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;\r\n            ___this.reservedPercent = 0.0;\r\n            ___this.notLockedCount = 0;\r\n\r\n            let notLockedSliders = [];\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    ___this.reservedPercent += sld.weight;\r\n                    continue;\r\n                }\r\n                notLockedSliders.push(sld);\r\n                ___this.notLockedCount++;\r\n            }\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    continue;\r\n                }\r\n                sld.max = 100 - ___this.reservedPercent;\r\n            }\r\n\r\n            if (notLockedSliders.length == 1) {\r\n                notLockedSliders[0].min = notLockedSliders[0].weight;\r\n            } else {\r\n                for (let i = 0; i < notLockedSliders.length; i++) {\r\n                    notLockedSliders[i].min = 0;\r\n                }\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    get paramWeightsRegionVersion(): ChangeResponse{\r\n        return {paramWeights: this.getParams(),\r\n            region: this._$regionSelector.val() as string, mmVersion: this._$versionSelector.val() as string}\r\n    }\r\n}\r\n\r\nnm.Sliders = TipSliders;\r\nexport default TipSliders;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src-ts/collections/Sliders.ts\n **/"],"sourceRoot":""}
\ No newline at end of file