Import yt_3.4.0-3.debian.tar.xz
authorBW Keller <malzraa@gmail.com>
Tue, 24 Oct 2017 16:11:30 +0000 (17:11 +0100)
committerBW Keller <malzraa@gmail.com>
Tue, 24 Oct 2017 16:11:30 +0000 (17:11 +0100)
[dgit import tarball yt 3.4.0-3 yt_3.4.0-3.debian.tar.xz]

16 files changed:
changelog [new file with mode: 0644]
compat [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
patches/fix_32bit_ftbfs.patch [new file with mode: 0644]
patches/fix_embedded_jquery.patch [new file with mode: 0644]
patches/fix_minified_leaflet.patch [new file with mode: 0644]
patches/man-page.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
python-yt.lintian-overrides [new file with mode: 0644]
python-yt.manpages [new file with mode: 0644]
python3-yt.lintian-overrides [new file with mode: 0644]
python3-yt.manpages [new file with mode: 0644]
rules [new file with mode: 0755]
source/format [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..30c7951
--- /dev/null
+++ b/changelog
@@ -0,0 +1,63 @@
+yt (3.4.0-3) unstable; urgency=low
+
+  * Fix 32 bit FTBF.  Closes: #879482
+
+ -- BW Keller <malzraa@gmail.com>  Tue, 24 Oct 2017 16:11:30 +0000
+
+yt (3.4.0-2) unstable; urgency=low
+
+  * Fix build issue with home directory needed for nose tests.
+
+ -- BW Keller <malzraa@gmail.com>  Sat, 21 Oct 2017 13:55:11 +0000
+
+yt (3.4.0-1) unstable; urgency=medium
+
+  * Upgrade to upstream version 3.4.0
+
+ -- BW Keller <malzraa@gmail.com>  Fri, 22 Sep 2017 17:14:53 +0000
+
+yt (3.3.3-2) unstable; urgency=low
+
+  * Fixes 32-bit build failures. Closes: #851831
+
+ -- BW Keller <malzraa@gmail.com>  Thu, 26 Jan 2017 14:19:12 -0500
+
+yt (3.3.3-1) unstable; urgency=low
+
+  * Upgrade to upstream version 3.3.3
+
+ -- BW Keller <malzraa@gmail.com>  Sun, 08 Jan 2017 18:03:12 -0500
+
+yt (3.3.1-1) unstable; urgency=low
+
+  * Upgrade to upstream version 3.3.1
+
+ -- BW Keller <malzraa@gmail.com>  Mon, 19 Sep 2016 12:35:29 -0400
+
+yt (3.2.3-2) unstable; urgency=medium
+
+  * ACTUALLY fixes build failures on i386. Closes: #803275
+
+ -- BW Keller <malzraa@gmail.com>  Mon, 12 Sep 2016 22:50:04 -0400
+
+yt (3.2.3-1) unstable; urgency=medium
+
+  * Upgrade to upstream version 3.2.3
+  * Remove dependence on libpng. Closes: #810709
+  * Fixes build failures. Closes: #810209, #803275
+  * Maintainer has changed. Closes: #817200
+
+ -- BW Keller <malzraa@gmail.com>  Tue, 6 Sep 2016 16:35:35 -0400
+
+yt (3.2.1-2) unstable; urgency=low
+
+  * Backport fix for mpl-1.5.
+  * Correct Python dependencies to fix FTBS. Closes: #802428
+
+ -- Kacper Kowalik <xarthisius.kk@gmail.com>  Thu, 22 Oct 2015 19:57:35 +0000
+
+yt (3.2.1-1) unstable; urgency=low
+
+  * Initial release. (Closes: #789976)
+
+ -- Kacper Kowalik <xarthisius.kk@gmail.com>  Tue, 28 Jul 2015 20:08:18 +0000
diff --git a/compat b/compat
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
+++ b/compat
@@ -0,0 +1 @@
+9
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..d5a7abb
--- /dev/null
+++ b/control
@@ -0,0 +1,80 @@
+Source: yt
+Section: python
+Priority: optional
+Maintainer: Debian Astronomy Team <debian-astro-maintainers@lists.alioth.debian.org>
+Uploaders: BW Keller <malzraa@gmail.com>
+Build-Depends: cython (>= 0.22),
+               cython3 (>= 0.22),
+               debhelper (>= 9),
+               dh-python,
+               libpython-dev,
+               libpython3-dev,
+               python-all-dev,
+               python-h5py,
+               python-matplotlib,
+               python-nose,
+               python-mock,
+               python-numpy,
+               python-setuptools,
+               python-sympy,
+               python-tk,
+               python3-all-dev,
+               python3-h5py,
+               python3-matplotlib,
+               python3-nose,
+               python3-numpy,
+               python3-setuptools,
+               python3-sympy,
+               python3-tk,
+               libjs-jquery
+Standards-Version: 3.9.8
+Homepage: http://yt-project.org/
+Vcs-Git: https://anonscm.debian.org/cgit/debian-astro/packages/yt.git
+Vcs-Browser: https://anonscm.debian.org/cgit/debian-astro/packages/yt.git
+X-Python-Version: >= 2.7
+X-Python3-Version: >= 3.3
+
+Package: python-yt
+Architecture: any
+Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends},
+         python-h5py,
+         python-matplotlib,
+         python-numpy (>= 1:1.6.1),
+         python-numpy-abi9,
+         python-mock,
+         python-sympy,
+         libjs-jquery
+Suggests: python-astropy,
+          python-scipy,
+          python-pyx
+Description: Framework for analyzing and visualizing simulation data (Python 2)
+ The yt project aims to produce an integrated science environment for
+ collaboratively asking and answering astrophysical questions. To do so, it will
+ encompass the creation of initial conditions, the execution of simulations, and
+ the detailed exploration and visualization of the resultant data. It will also
+ provide a standard framework based on physical quantities interoperability
+ between codes.  
+ .
+ This package contains the Python 2 version of the package.
+
+Package: python3-yt
+Architecture: any
+Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends},
+         python3-h5py,
+         python3-matplotlib,
+         python3-numpy (>= 1:1.6.1),
+         python3-numpy-abi9,
+         python3-sympy,
+         libjs-jquery
+Suggests: python3-astropy,
+          python3-scipy,
+          python3-pyx
+Description: Framework for analyzing and visualizing simulation data (Python 3)
+ The yt project aims to produce an integrated science environment for
+ collaboratively asking and answering astrophysical questions. To do so, it will
+ encompass the creation of initial conditions, the execution of simulations, and
+ the detailed exploration and visualization of the resultant data. It will also
+ provide a standard framework based on physical quantities interoperability
+ between codes.  
+ .
+ This package contains the Python 3 version of the package.
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..995f5a0
--- /dev/null
+++ b/copyright
@@ -0,0 +1,174 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: yt
+Upstream-Contact: Ben Keller <malzraa@gmail.com>
+Source: http://yt-project.org/
+
+Files: *
+Copyright: Anne M. Archibald 2008,
+  (c) Damian Eads, 2007-2008,
+  (c) 2007-2011 John Tsiombikas <nuclear@siggraph.org>,
+  (c) 2006-2013, Matthew Turk <matthewturk@gmail.com>,
+  (c) 2013-, yt Development Team,
+  2015 Kacper Kowalik <xarthisius.kk@gmail.com> (Debian files)
+License: BSD-3-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ .
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+ .
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+ .
+ * Neither the name of the Astropy Team nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+Files: yt/pmods.py
+Copyright: (c) 2011, Lawrence Livermore National Security, LLC.
+License: LNLL-BSD
+ The modifications to this code are copyright (c) 2011, Lawrence
+ Livermore National Security, LLC. Produced at the Lawrence Livermore
+ National Laboratory. Written by Tim Kadich and Asher Langton
+ <langton2@llnl.gov>. Released as LLNL-CODE-522751 under the name
+ SmartImport.py, version 1.0. All rights reserved.
+ .
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ .
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the disclaimer below.
+ .
+ - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the disclaimer (as noted below)
+   in the documentation and/or other materials provided with the
+   distribution.
+ .
+ - Neither the name of the LLNS/LLNL nor the names of its contributors
+   may be used to endorse or promote products derived from this
+   software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE
+ LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ .
+ Additional BSD Notice
+ .
+ 1. This notice is required to be provided under our contract with the
+ U.S. Department of Energy (DOE). This work was produced at Lawrence
+ Livermore National Laboratory under Contract No. DE-AC52-07NA27344
+ with the DOE.
+ .
+ 2. Neither the United States Government nor Lawrence Livermore
+ National Security, LLC nor any of their employees, makes any warranty,
+ express or implied, or assumes any liability or responsibility for the
+ accuracy, completeness, or usefulness of any information, apparatus,
+ product, or process disclosed, or represents that its use would not
+ infringe privately-owned rights.
+ .
+ 3. Also, reference herein to any specific commercial products,
+ process, or services by trade name, trademark, manufacturer or
+ otherwise does not necessarily constitute or imply its endorsement,
+ recommendation, or favoring by the United States Government or
+ Lawrence Livermore National Security, LLC. The views and opinions of
+ authors expressed herein do not necessarily state or reflect those of
+ the United States Government or Lawrence Livermore National Security,
+ LLC, and shall not be used for advertising or product endorsement
+ purposes.
+
+Files: yt/frontends/artio/artio_headers/*
+Copyright: (c) 2012-2013, Douglas H. Rudd
+License: LGPL-3
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 3 of the License, or (at your option) any later version.
+ .
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ . 
+ On Debian systems, the full text of the GNU Lesser General Public
+ License version 3 can be found in the file
+ `/usr/share/common-licenses/LGPL-3'.
+Comment: This code is derived from knee.py, which was included in the Python 
+  2.6 distribution.
+
+Files: yt/extern/bottle.py yt/extern/rocket.py yt/extern/six.py yt/utilities/poster/* yt/utilities/pyparselibconfig/libconfig.py
+Copyright: (c) 2010, Marcel Hellkamp,
+  (c) 2011 Timothy Farrell
+  (c) 2010-2014 Benjamin Peterson
+  (c) 2011 Chris AtLee
+  (c) 2013, Samuel Skillman
+License: MIT
+
+License: MIT
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Files: yt/extern/tqdm/*
+Copyright: Copyright (c) 2013 noamraph
+License: MIT
+
+Files: yt/visualization/mapserver/html/leaflet/leaflet.js
+Copyright: Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
+License: BSD-2-Clause
+ Redistribution and use in source and binary forms, with or without modification, are 
+ permitted provided that the following conditions are met: 
+ .
+    1. Redistributions of source code must retain the above copyright notice, this list of 
+       conditions and the following disclaimer. 
+ .       
+    2. Redistributions in binary form must reproduce the above copyright notice, this list 
+       of conditions and the following disclaimer in the documentation and/or other materials
+       provided with the distribution. 
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/patches/fix_32bit_ftbfs.patch b/patches/fix_32bit_ftbfs.patch
new file mode 100644 (file)
index 0000000..9147e49
--- /dev/null
@@ -0,0 +1,39 @@
+Author: Ben Keller <malzraa@gmail.com>
+Description: Fix issues with pointer size assumptions on 32-bit systems
+--- a/yt/utilities/lib/alt_ray_tracers.pyx
++++ b/yt/utilities/lib/alt_ray_tracers.pyx
+@@ -101,7 +101,7 @@
+                                           rleft, rright, zleft, zright, \
+                                           cleft, cright, thetaleft, thetaright, \
+                                           tmleft, tpleft, tmright, tpright, tsect
+-    cdef np.ndarray[np.int64_t, ndim=1, cast=True] inds, tinds, sinds
++    cdef np.ndarray[np.int_t, ndim=1, cast=True] inds, tinds, sinds
+     cdef np.ndarray[np.float64_t, ndim=2] xyz, rztheta, ptemp, b1, b2, dsect
+     # set up  points
+@@ -201,12 +201,12 @@
+     tsect, dsect = _cart_intersect(p1cart, p2cart, _cyl2cart(b1), _cyl2cart(b2))
+     tmask = np.logical_and(0.0<=tsect, tsect<=1.0)
+     ret = np.unique(tsect[tmask], return_index=True)
+-    tsect, tinds = ret[0], ret[1].astype('int64')
++    tsect, tinds = ret[0], ret[1].astype('int')
+     inds = inds[tmask][tinds]
+     xyz = dsect[tmask][tinds]
+     s = np.sqrt(((xyz - p1cart) * (xyz - p1cart)).sum(axis=1))
+     ret = np.unique(s, return_index=True)
+-    s, sinds = ret[0], ret[1].astype('int64')
++    s, sinds = ret[0], ret[1].astype('int')
+     inds = inds[sinds]
+     xyz = xyz[sinds]
+     t = s/np.sqrt((dpcart*dpcart).sum())
+--- a/yt/utilities/lib/misc_utilities.pyx
++++ b/yt/utilities/lib/misc_utilities.pyx
+@@ -437,7 +437,7 @@
+     cdef np.float64_t z0
+     alpha = np.zeros(4)
+     #the sources must be ordered along z to avoid edges when two overlap
+-    idx = np.argsort(zs)
++    idx = np.asarray(np.argsort(zs), dtype='int64')
+     for j in idx:
+         r = radii[j]
+         r2 = int((r+0.3)*(r+0.3))  #0.3 to get nicer shape
diff --git a/patches/fix_embedded_jquery.patch b/patches/fix_embedded_jquery.patch
new file mode 100644 (file)
index 0000000..c2fab1f
--- /dev/null
@@ -0,0 +1,15 @@
+Author: BW Keller <malzraa@gmail.com>
+Description: Use debian's built in jquery
+Index: yt-debian/yt/visualization/mapserver/html/map_index.html
+===================================================================
+--- yt-debian.orig/yt/visualization/mapserver/html/map_index.html
++++ yt-debian/yt/visualization/mapserver/html/map_index.html
+@@ -4,7 +4,7 @@
+ <!-- Leaflet JavaScript -->
+ <script type="text/javascript" src="/leaflet/leaflet.js"></script>
+ <link rel="stylesheet" href="/leaflet/leaflet.css" />
+-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
++<script type="text/javascript" src="/usr/share/javascript/jquery/jquery.min.js"></script>
+ <script type="text/javascript">
+   $(document).ready(function() {
+       // initialize the map on the "map" div with a given center and zoom 
diff --git a/patches/fix_minified_leaflet.patch b/patches/fix_minified_leaflet.patch
new file mode 100644 (file)
index 0000000..e9d22f3
--- /dev/null
@@ -0,0 +1,2089 @@
+Author: BW Keller <malzraa@gmail.com>
+Description: Replace leaflet.js with an un-minified version
+Index: yt-debian/yt/visualization/mapserver/html/leaflet/leaflet.js
+===================================================================
+--- yt-debian.orig/yt/visualization/mapserver/html/leaflet/leaflet.js
++++ yt-debian/yt/visualization/mapserver/html/leaflet/leaflet.js
+@@ -3,112 +3,1973 @@
+  Leaflet is a BSD-licensed JavaScript library for map display and interaction.
+  See http://cloudmade.github.com/Leaflet/ for more information.
+ */
+-(function(a){var b={VERSION:"0.2",ROOT_URL:function(){for(var a=document.getElementsByTagName("script"),b=/^(.*\/)leaflet-?([\w-]*)\.js.*$/,e=0,f=a.length;e<f;e++){var g=a[e].src;if(g=g&&g.match(b)){if(g[2]=="include")break;return g[1]}}return"../../dist/"}(),noConflict:function(){a.L=this._originalL;return this},_originalL:a.L};window.L=b})(this);L.Util={extend:function(a){for(var b=Array.prototype.slice.call(arguments,1),c=0,d=b.length,e;c<d;c++){e=b[c]||{};for(var f in e)e.hasOwnProperty(f)&&(a[f]=e[f])}return a},bind:function(a,b){return function(){return a.apply(b,arguments)}},stamp:function(){var a=0;return function(b){b._leaflet_id=b._leaflet_id||++a;return b._leaflet_id}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1E3/60)}var b=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||
+-window.oRequestAnimationFrame||window.msRequestAnimationFrame||a;return function(c,d,e){c=d?L.Util.bind(c,d):d;e&&b===a?c():b(c)}}(),limitExecByInterval:function(a,b,c){function d(){e=!1;f&&(g.callee.apply(c,g),f=!1)}var e,f,g;return function(){g=arguments;e?f=!0:(e=!0,setTimeout(d,b),a.apply(c,g))}},falseFn:function(){return!1},formatNum:function(a,b){var c=Math.pow(10,b||5);return Math.round(a*c)/c},setOptions:function(a,b){a.options=L.Util.extend({},a.options,b)},getParamString:function(a){var b=
+-[],c;for(c in a)a.hasOwnProperty(c)&&b.push(c+"="+a[c]);return"?"+b.join("&")}};L.Class=function(){};
+-L.Class.extend=function(a){var b=function(){!L.Class._prototyping&&this.initialize&&this.initialize.apply(this,arguments)};L.Class._prototyping=!0;var c=new this;L.Class._prototyping=!1;c.constructor=b;b.prototype=c;c.superclass=this.prototype;a.statics&&(L.Util.extend(b,a.statics),delete a.statics);a.includes&&(L.Util.extend.apply(null,[c].concat(a.includes)),delete a.includes);if(a.options&&c.options)a.options=L.Util.extend({},c.options,a.options);L.Util.extend(c,a);b.extend=arguments.callee;b.include=
+-function(a){L.Util.extend(this.prototype,a)};for(var d in this)this.hasOwnProperty(d)&&d!="prototype"&&(b[d]=this[d]);return b};L.Mixin={};
+-L.Mixin.Events={addEventListener:function(a,b,c){var d=this._leaflet_events=this._leaflet_events||{};d[a]=d[a]||[];d[a].push({action:b,context:c});return this},hasEventListeners:function(a){return"_leaflet_events"in this&&a in this._leaflet_events&&this._leaflet_events[a].length>0},removeEventListener:function(a,b,c){if(!this.hasEventListeners(a))return this;for(var d=0,e=this._leaflet_events,f=e[a].length;d<f;d++)if(e[a][d].action===b&&(!c||e[a][d].context===c)){e[a].splice(d,1);break}return this},fireEvent:function(a,
+-b){if(this.hasEventListeners(a)){for(var c=L.Util.extend({type:a,target:this},b),d=this._leaflet_events[a].slice(),e=0,f=d.length;e<f;e++)d[e].action.call(d[e].context||this,c);return this}}};L.Mixin.Events.on=L.Mixin.Events.addEventListener;L.Mixin.Events.off=L.Mixin.Events.removeEventListener;L.Mixin.Events.fire=L.Mixin.Events.fireEvent;(function(){var a=navigator.userAgent.toLowerCase(),b=!!window.ActiveXObject,c=a.indexOf("webkit")!=-1,d=a.indexOf("mobi")!=-1,e=a.indexOf("android")!=-1,f=window.opera;L.Browser={ie:b,ie6:b&&!window.XMLHttpRequest,webkit:c,webkit3d:c&&"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix,mobileWebkit:c&&(d||e),mobileOpera:d&&f,gecko:a.indexOf("gecko")!=-1,android:e};L.Browser.touch=L.Browser.mobileWebkit||L.Browser.mobileOpera})();L.Point=function(a,b,c){this.x=c?Math.round(a):a;this.y=c?Math.round(b):b};
+-L.Point.prototype={add:function(a){return this.clone()._add(a)},_add:function(a){this.x+=a.x;this.y+=a.y;return this},subtract:function(a){return this.clone()._subtract(a)},_subtract:function(a){this.x-=a.x;this.y-=a.y;return this},divideBy:function(a,b){return new L.Point(this.x/a,this.y/a,b)},multiplyBy:function(a){return new L.Point(this.x*a,this.y*a)},distanceTo:function(a){var b=a.x-this.x,a=a.y-this.y;return Math.sqrt(b*b+a*a)},round:function(){return this.clone()._round()},_round:function(){this.x=
+-Math.round(this.x);this.y=Math.round(this.y);return this},clone:function(){return new L.Point(this.x,this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}};L.Bounds=L.Class.extend({initialize:function(a,b){if(a)for(var c=a instanceof Array?a:[a,b],d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this.min&&!this.max?(this.min=new L.Point(a.x,a.y),this.max=new L.Point(a.x,a.y)):(this.min.x=Math.min(a.x,this.min.x),this.max.x=Math.max(a.x,this.max.x),this.min.y=Math.min(a.y,this.min.y),this.max.y=Math.max(a.y,this.max.y))},getCenter:function(a){return new L.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,a)},contains:function(a){var b;
+-if(a instanceof L.Bounds)b=a.min,a=a.max;return b.x>=this.min.x&&a.x<=this.max.x&&b.y>=this.min.y&&a.y<=this.max.y}});L.Transformation=L.Class.extend({initialize:function(a,b,c,d){this._a=a;this._b=b;this._c=c;this._d=d},transform:function(a,b){return this._transform(a.clone(),b)},_transform:function(a,b){b=b||1;a.x=b*(this._a*a.x+this._b);a.y=b*(this._c*a.y+this._d);return a},untransform:function(a,b){b=b||1;return new L.Point((a.x/b-this._b)/this._a,(a.y/b-this._d)/this._c)}});L.LineUtil={simplify:function(a,b){if(!b)return a.slice();a=this.reducePoints(a,b);return a=this.simplifyDP(a,b)},pointToSegmentDistance:function(a,b,c){return Math.sqrt(this._sqPointToSegmentDist(a,b,c))},simplifyDP:function(a,b){for(var c=0,d=0,e=b*b,f=1,g=a.length,h;f<g-1;f++)h=this._sqPointToSegmentDist(a[f],a[0],a[g-1]),h>c&&(d=f,c=h);return c>=e?(c=a.slice(0,d),d=a.slice(d),g=this.simplifyDP(c,b).slice(0,g-2),d=this.simplifyDP(d,b),g.concat(d)):[a[0],a[g-1]]},reducePoints:function(a,b){for(var c=
+-[a[0]],d=b*b,e=1,f=0,g=a.length;e<g;e++)this._sqDist(a[e],a[f])<d||(c.push(a[e]),f=e);f<g-1&&c.push(a[g-1]);return c},clipSegment:function(a,b,c,d){var d=d?this._lastCode:this._getBitCode(a,c),e=this._getBitCode(b,c);for(this._lastCode=e;;)if(d|e)if(d&e)return!1;else{var f=d||e,g=this._getEdgeIntersection(a,b,f,c),h=this._getBitCode(g,c);f==d?(a=g,d=h):(b=g,e=h)}else return[a,b]},_getEdgeIntersection:function(a,b,c,d){var e=b.x-a.x,b=b.y-a.y,f=d.min,d=d.max;if(c&8)return new L.Point(a.x+e*(d.y-a.y)/
+-b,d.y);else if(c&4)return new L.Point(a.x+e*(f.y-a.y)/b,f.y);else if(c&2)return new L.Point(d.x,a.y+b*(d.x-a.x)/e);else if(c&1)return new L.Point(f.x,a.y+b*(f.x-a.x)/e)},_getBitCode:function(a,b){var c=0;a.x<b.min.x?c|=1:a.x>b.max.x&&(c|=2);a.y<b.min.y?c|=4:a.y>b.max.y&&(c|=8);return c},_sqDist:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*c+d*d},_sqPointToSegmentDist:function(a,b,c){var d=c.x-b.x,e=c.y-b.y;if(!d&&!e)return this._sqDist(a,b);var f=((a.x-b.x)*d+(a.y-b.y)*e)/this._sqDist(b,c);if(f<
+-0)return this._sqDist(a,b);if(f>1)return this._sqDist(a,c);b=new L.Point(b.x+d*f,b.y+e*f);return this._sqDist(a,b)}};L.PolyUtil={};L.PolyUtil.clipPolygon=function(a,b){var c,d=[1,4,2,8],e,f,g,h,j,k,l=L.LineUtil;e=0;for(j=a.length;e<j;e++)a[e]._code=l._getBitCode(a[e],b);for(g=0;g<4;g++){k=d[g];c=[];e=0;j=a.length;for(f=j-1;e<j;f=e++)if(h=a[e],f=a[f],h._code&k){if(!(f._code&k))f=l._getEdgeIntersection(f,h,k,b),f._code=l._getBitCode(f,b),c.push(f)}else{if(f._code&k)f=l._getEdgeIntersection(f,h,k,b),f._code=l._getBitCode(f,b),c.push(f);c.push(h)}a=c}return a};L.DomEvent={addListener:function(a,b,c,d){function e(b){return c.call(d||a,b||L.DomEvent._getEvent())}var f=L.Util.stamp(c);if(L.Browser.touch&&b=="dblclick"&&this.addDoubleTapListener)this.addDoubleTapListener(a,e,f);else if("addEventListener"in a)if(b=="mousewheel")a.addEventListener("DOMMouseScroll",e,!1),a.addEventListener(b,e,!1);else if(b=="mouseenter"||b=="mouseleave"){var g=e,e=function(b){if(L.DomEvent._checkMouse(a,b))return g(b)};a.addEventListener(b=="mouseenter"?"mouseover":"mouseout",
+-e,!1)}else a.addEventListener(b,e,!1);else"attachEvent"in a&&a.attachEvent("on"+b,e);a["_leaflet_"+b+f]=e},removeListener:function(a,b,c){var c=L.Util.stamp(c),d="_leaflet_"+b+c;handler=a[d];L.Browser.mobileWebkit&&b=="dblclick"&&this.removeDoubleTapListener?this.removeDoubleTapListener(a,c):"removeEventListener"in a?b=="mousewheel"?(a.removeEventListener("DOMMouseScroll",handler,!1),a.removeEventListener(b,handler,!1)):b=="mouseenter"||b=="mouseleave"?a.removeEventListener(b=="mouseenter"?"mouseover":
+-"mouseout",handler,!1):a.removeEventListener(b,handler,!1):"detachEvent"in a&&a.detachEvent("on"+b,handler);a[d]=null},_checkMouse:function(a,b){var c=b.relatedTarget;if(!c)return!0;try{for(;c&&c!=a;)c=c.parentNode}catch(d){return!1}return c!=a},_getEvent:function(){var a=window.event;if(!a)for(var b=arguments.callee.caller;b;){if((a=b.arguments[0])&&Event==a.constructor)break;b=b.caller}return a},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},disableClickPropagation:function(a){L.DomEvent.addListener(a,
+-"mousedown",L.DomEvent.stopPropagation);L.DomEvent.addListener(a,"click",L.DomEvent.stopPropagation);L.DomEvent.addListener(a,"dblclick",L.DomEvent.stopPropagation)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stop:function(a){L.DomEvent.preventDefault(a);L.DomEvent.stopPropagation(a)},getMousePosition:function(a,b){var c=new L.Point(a.pageX?a.pageX:a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,a.pageY?a.pageY:a.clientY+document.body.scrollTop+
+-document.documentElement.scrollTop);return b?c.subtract(L.DomUtil.getCumulativeOffset(b)):c},getWheelDelta:function(a){var b=0;a.wheelDelta&&(b=a.wheelDelta/120);a.detail&&(b=-a.detail/3);return b}};L.Util.extend(L.DomEvent,{addDoubleTapListener:function(a,b,c){function d(a){if(a.touches.length==1){var b=Date.now(),c=b-(f||b);j=a.touches[0];g=c>0&&c<=h;f=b}}function e(){if(g)j.type="dblclick",b(j),f=null}var f,g=!1,h=250,j;a["_leaflet_touchstart"+c]=d;a["_leaflet_touchend"+c]=e;a.addEventListener("touchstart",d,!1);a.addEventListener("touchend",e,!1)},removeDoubleTapListener:function(a,b){a.removeEventListener(a,a["_leaflet_touchstart"+b],!1);a.removeEventListener(a,a["_leaflet_touchend"+b],
+-!1)}});L.DomUtil={get:function(a){return typeof a=="string"?document.getElementById(a):a},getStyle:function(a,b){var c=a.style[b];!c&&a.currentStyle&&(c=a.currentStyle[b]);if(!c||c=="auto")c=(c=document.defaultView.getComputedStyle(a,null))?c[b]:null;return c=="auto"?null:c},getCumulativeOffset:function(a){var b=0,c=0;do b+=a.offsetTop||0,c+=a.offsetLeft||0,a=a.offsetParent;while(a);return new L.Point(c,b)},create:function(a,b,c){a=document.createElement(a);a.className=b;c&&c.appendChild(a);return a},disableTextSelection:function(){document.selection&&
+-document.selection.empty&&document.selection.empty();if(!this._onselectstart)this._onselectstart=document.onselectstart,document.onselectstart=L.Util.falseFn},enableTextSelection:function(){document.onselectstart=this._onselectstart;this._onselectstart=null},CLASS_RE:/(\\s|^)'+cls+'(\\s|$)/,hasClass:function(a,b){return a.className.length>0&&RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className)},addClass:function(a,b){L.DomUtil.hasClass(a,b)||(a.className+=(a.className?" ":"")+b)},setOpacity:function(a,
+-b){L.Browser.ie?a.style.filter="alpha(opacity="+Math.round(b*100)+")":a.style.opacity=b},testProp:function(a){for(var b=document.documentElement.style,c=0;c<a.length;c++)if(a[c]in b)return a[c];return!1},getTranslateString:function(a){return L.DomUtil.TRANSLATE_OPEN+a.x+"px,"+a.y+"px"+L.DomUtil.TRANSLATE_CLOSE},getScaleString:function(a,b){return L.DomUtil.getTranslateString(b)+" scale("+a+") "+L.DomUtil.getTranslateString(b.multiplyBy(-1))},setPosition:function(a,b){a._leaflet_pos=b;L.Browser.webkit?
+-a.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(b):(a.style.left=b.x+"px",a.style.top=b.y+"px")},getPosition:function(a){return a._leaflet_pos}};
+-L.Util.extend(L.DomUtil,{TRANSITION:L.DomUtil.testProp(["transition","webkitTransition","OTransition","MozTransition","msTransition"]),TRANSFORM:L.DomUtil.testProp(["transformProperty","WebkitTransform","OTransform","MozTransform","msTransform"]),TRANSLATE_OPEN:"translate"+(L.Browser.webkit3d?"3d(":"("),TRANSLATE_CLOSE:L.Browser.webkit3d?",0)":")"});L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?"touchstart":"mousedown",END:L.Browser.touch?"touchend":"mouseup",MOVE:L.Browser.touch?"touchmove":"mousemove",TAP_TOLERANCE:15},initialize:function(a,b){this._element=a;this._dragStartTarget=b||a},enable:function(){if(!this._enabled)L.DomEvent.addListener(this._dragStartTarget,L.Draggable.START,this._onDown,this),this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._dragStartTarget,
+-L.Draggable.START,this._onDown),this._enabled=!1},_onDown:function(a){if(!(a.shiftKey||a.which!=1&&a.button!=1&&!a.touches)&&!(a.touches&&a.touches.length>1)){var b=a.touches&&a.touches.length==1?a.touches[0]:a;L.DomEvent.preventDefault(a);L.Browser.mobileWebkit&&(b.target.className+=" leaflet-active");this._moved=!1;L.DomUtil.disableTextSelection();this._setMovingCursor();this._startPos=this._newPos=L.DomUtil.getPosition(this._element);this._startPoint=new L.Point(b.clientX,b.clientY);L.DomEvent.addListener(document,
+-L.Draggable.MOVE,this._onMove,this);L.DomEvent.addListener(document,L.Draggable.END,this._onUp,this)}},_onMove:function(a){if(!(a.touches&&a.touches.length>1)){L.DomEvent.preventDefault(a);a=a.touches&&a.touches.length==1?a.touches[0]:a;if(!this._moved)this.fire("dragstart"),this._moved=!0;this._newPos=this._startPos.add(new L.Point(a.clientX,a.clientY)).subtract(this._startPoint);L.Util.requestAnimFrame(this._updatePosition,this,!0);this.fire("drag")}},_updatePosition:function(){L.DomUtil.setPosition(this._element,
+-this._newPos)},_onUp:function(a){if(a.changedTouches){var a=a.changedTouches[0],b=a.target,c=this._newPos&&this._newPos.distanceTo(this._startPos)||0;b.className=b.className.replace(" leaflet-active","");c<L.Draggable.TAP_TOLERANCE&&this._simulateEvent("click",a)}L.DomUtil.enableTextSelection();this._restoreCursor();L.DomEvent.removeListener(document,L.Draggable.MOVE,this._onMove);L.DomEvent.removeListener(document,L.Draggable.END,this._onUp);this._moved&&this.fire("dragend")},_removeActiveClass:function(){},
+-_setMovingCursor:function(){this._bodyCursor=document.body.style.cursor;document.body.style.cursor="move"},_restoreCursor:function(){document.body.style.cursor=this._bodyCursor},_simulateEvent:function(a,b){var c=document.createEvent("MouseEvent");c.initMouseEvent(a,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null);b.target.dispatchEvent(c)}});L.Transition=L.Class.extend({includes:L.Mixin.Events,statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition},implemented:function(){return L.Transition.NATIVE||L.Transition.TIMER}},options:{easing:"ease",duration:0.5},_setProperty:function(a,b){var c=L.Transition.CUSTOM_PROPS_SETTERS;if(a in c)c[a](this._el,b);else this._el.style[a]=b}});L.Transition=L.Transition.extend({statics:function(){var a=L.DomUtil.TRANSITION;return{NATIVE:!!a,TRANSITION:a,PROPERTY:a+"Property",DURATION:a+"Duration",EASING:a+"TimingFunction",END:a=="webkitTransition"||a=="OTransition"?a+"End":"transitionend",CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit?L.DomUtil.TRANSFORM:"top, left"}}}(),options:{fakeStepInterval:100},initialize:function(a,b){this._el=a;L.Util.setOptions(this,b);L.DomEvent.addListener(a,L.Transition.END,this._onTransitionEnd,this);this._onFakeStep=
+-L.Util.bind(this._onFakeStep,this)},run:function(a){var b,c=[],d=L.Transition.CUSTOM_PROPS_PROPERTIES;for(b in a)a.hasOwnProperty(b)&&(b=d[b]?d[b]:b,b=b.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()}),c.push(b));this._el.style[L.Transition.DURATION]=this.options.duration+"s";this._el.style[L.Transition.EASING]=this.options.easing;this._el.style[L.Transition.PROPERTY]=c.join(", ");for(b in a)a.hasOwnProperty(b)&&this._setProperty(b,a[b]);this._inProgress=!0;this.fire("start");L.Transition.NATIVE?
+-this._timer=setInterval(this._onFakeStep,this.options.fakeStepInterval):this._onTransitionEnd()},_onFakeStep:function(){this.fire("step")},_onTransitionEnd:function(){if(this._inProgress)this._inProgress=!1,clearInterval(this._timer),this._el.style[L.Transition.PROPERTY]="none",this.fire("step"),this.fire("end")}});L.Transition=L.Transition.NATIVE?L.Transition:L.Transition.extend({statics:{getTime:Date.now||function(){return+new Date},TIMER:!0,EASINGS:{ease:[0.25,0.1,0.25,1],linear:[0,0,1,1],"ease-in":[0.42,0,1,1],"ease-out":[0,0,0.58,1],"ease-in-out":[0.42,0,0.58,1]},CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition},UNIT_RE:/^[\d\.]+(\D*)$/},options:{fps:50},initialize:function(a,b){this._el=a;L.Util.extend(this.options,b);var c=L.Transition.EASINGS[this.options.easing]||L.Transition.EASINGS.ease;this._p1=
+-new L.Point(0,0);this._p2=new L.Point(c[0],c[1]);this._p3=new L.Point(c[2],c[3]);this._p4=new L.Point(1,1);this._step=L.Util.bind(this._step,this);this._interval=Math.round(1E3/this.options.fps)},run:function(a){this._props={};var b=L.Transition.CUSTOM_PROPS_GETTERS,c=L.Transition.UNIT_RE;this.fire("start");for(var d in a)if(a.hasOwnProperty(d)){var e={};if(d in b)e.from=b[d](this._el);else{var f=this._el.style[d].match(c);e.from=parseFloat(f[0]);e.unit=f[1]}e.to=a[d];this._props[d]=e}clearInterval(this._timer);
+-this._timer=setInterval(this._step,this._interval);this._startTime=L.Transition.getTime()},_step:function(){var a=L.Transition.getTime()-this._startTime,b=this.options.duration*1E3;a<b?this._runFrame(this._cubicBezier(a/b)):(this._runFrame(1),this._complete())},_runFrame:function(a){var b=L.Transition.CUSTOM_PROPS_SETTERS,c,d;for(c in this._props)this._props.hasOwnProperty(c)&&(d=this._props[c],c in b?(d=d.to.subtract(d.from).multiplyBy(a).add(d.from),b[c](this._el,d)):this._el.style[c]=(d.to-d.from)*
+-a+d.from+d.unit);this.fire("step")},_complete:function(){clearInterval(this._timer);this.fire("end")},_cubicBezier:function(a){var b=3*Math.pow(1-a,2)*a,c=3*(1-a)*Math.pow(a,2),d=Math.pow(a,3),a=this._p1.multiplyBy(Math.pow(1-a,3)),b=this._p2.multiplyBy(b),c=this._p3.multiplyBy(c),d=this._p4.multiplyBy(d);return a.add(b).add(c).add(d).y}});L.LatLng=function(a,b,c){c!==!0&&(a=Math.max(Math.min(a,90),-90),b=(b+180)%360+(b<-180?180:-180));this.lat=a;this.lng=b};L.Util.extend(L.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1.0E-9});L.LatLng.prototype={equals:function(a){if(!(a instanceof L.LatLng))return!1;return Math.max(Math.abs(this.lat-a.lat),Math.abs(this.lng-a.lng))<=L.LatLng.MAX_MARGIN},toString:function(){return"LatLng("+L.Util.formatNum(this.lat)+", "+L.Util.formatNum(this.lng)+")"}};L.LatLngBounds=L.Class.extend({initialize:function(a,b){if(a)for(var c=a instanceof Array?a:[a,b],d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this._southWest&&!this._northEast?(this._southWest=new L.LatLng(a.lat,a.lng),this._northEast=new L.LatLng(a.lat,a.lng)):(this._southWest.lat=Math.min(a.lat,this._southWest.lat),this._southWest.lng=Math.min(a.lng,this._southWest.lng),this._northEast.lat=Math.max(a.lat,this._northEast.lat),this._northEast.lng=Math.max(a.lng,this._northEast.lng))},
+-getCenter:function(){return new L.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new L.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new L.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(a){var b=this._southWest,c=this._northEast,d;a instanceof L.LatLngBounds?(d=a.getSouthWest(),
+-a=a.getNorthEast()):d=a;return d.lat>=b.lat&&a.lat<=c.lat&&d.lng>=b.lng&&a.lng<=c.lng}});L.Projection={};L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=a.lng*b,a=Math.max(Math.min(c,a.lat),-c)*b,a=Math.log(Math.tan(Math.PI/4+a/2));return new L.Point(d,a)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG;return new L.LatLng((2*Math.atan(Math.exp(a.y))-Math.PI/2)*c,a.x*c,b)}};L.Projection.LonLat={project:function(a){return new L.Point(a.lng,a.lat)},unproject:function(a,b){return new L.LatLng(a.y,a.x,b)}};L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=this.R_MAJOR,e=a.lng*b*d,a=Math.max(Math.min(c,a.lat),-c)*b,b=this.R_MINOR/d,b=Math.sqrt(1-b*b),c=b*Math.sin(a),c=Math.pow((1-c)/(1+c),b*0.5),a=-d*Math.log(Math.tan(0.5*(Math.PI*0.5-a))/c);return new L.Point(e,a)},unproject:function(a,b){for(var c=L.LatLng.RAD_TO_DEG,d=this.R_MAJOR,e=a.x*c/d,f=this.R_MINOR/d,f=Math.sqrt(1-f*f),d=Math.exp(-a.y/d),
+-g=Math.PI/2-2*Math.atan(d),h=15,j=0.1;Math.abs(j)>1.0E-7&&--h>0;)j=f*Math.sin(g),j=Math.PI/2-2*Math.atan(d*Math.pow((1-j)/(1+j),0.5*f))-g,g+=j;return new L.LatLng(g*c,e,b)}};L.CRS={latLngToPoint:function(a,b){return this.transformation._transform(this.projection.project(a),b)},pointToLatLng:function(a,b,c){return this.projection.unproject(this.transformation.untransform(a,b),c)},project:function(a){return this.projection.project(a)}};L.CRS.EPSG3857=L.Util.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(0.5/Math.PI,0.5,-0.5/Math.PI,0.5),project:function(a){return this.projection.project(a).multiplyBy(6378137)}});L.CRS.EPSG900913=L.Util.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"});L.CRS.EPSG4326=L.Util.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,0.5,-1/360,0.5)});L.CRS.EPSG3395=L.Util.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var a=L.Projection.Mercator;return new L.Transformation(0.5/(Math.PI*a.R_MAJOR),0.5,-0.5/(Math.PI*a.R_MINOR),0.5)}()});L.LayerGroup=L.Class.extend({initialize:function(a){this._layers={};if(a)for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},addLayer:function(a){this._layers[L.Util.stamp(a)]=a;this._map&&this._map.addLayer(a);return this},removeLayer:function(a){delete this._layers[L.Util.stamp(a)];this._map&&this._map.removeLayer(a);return this},clearLayers:function(){this._iterateLayers(this.removeLayer,this);return this},onAdd:function(a){this._map=a;this._iterateLayers(a.addLayer,a)},onRemove:function(a){this._iterateLayers(a.removeLayer,
+-a);delete this._map},_iterateLayers:function(a,b){for(var c in this._layers)this._layers.hasOwnProperty(c)&&a.call(b,this._layers[c])}});L.FeatureGroup=L.LayerGroup.extend({includes:L.Mixin.Events,addLayer:function(a){this._initEvents(a);L.LayerGroup.prototype.addLayer.call(this,a);this._popupContent&&a.bindPopup&&a.bindPopup(this._popupContent)},bindPopup:function(a){this._popupContent=a;for(var b in this._layers)this._layers.hasOwnProperty(b)&&this._layers[b].bindPopup&&this._layers[b].bindPopup(a)},_events:["click","dblclick","mouseover","mouseout"],_initEvents:function(a){for(var b=0,c=this._events.length;b<c;b++)a.on(this._events[b],
+-this._propagateEvent,this)},_propagateEvent:function(a){a.layer=a.target;a.target=this;this.fire(a.type,a)}});L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",opacity:1,scheme:"xyz",noWrap:!1,unloadInvisibleTiles:L.Browser.mobileWebkit,updateWhenIdle:L.Browser.mobileWebkit},initialize:function(a,b){L.Util.setOptions(this,b);this._url=a;if(typeof this.options.subdomains=="string")this.options.subdomains=this.options.subdomains.split("")},onAdd:function(a){this._map=a;this._initContainer();this._createTileProto();
+-a.on("viewreset",this._reset,this);if(this.options.updateWhenIdle)a.on("moveend",this._update,this);else this._limitedUpdate=L.Util.limitExecByInterval(this._update,100,this),a.on("move",this._limitedUpdate,this);this._reset();this._update()},onRemove:function(){this._map.getPanes().tilePane.removeChild(this._container);this._container=null;this._map.off("viewreset",this._reset,this);this.options.updateWhenIdle?this._map.off("moveend",this._update,this):this._map.off("move",this._limitedUpdate,this)},
+-getAttribution:function(){return this.options.attribution},setOpacity:function(a){this.options.opacity=a;this._setOpacity(a);if(L.Browser.webkit)for(i in this._tiles)this._tiles[i].style.webkitTransform+=" translate(0,0)"},_setOpacity:function(a){a<1&&L.DomUtil.setOpacity(this._container,a)},_initContainer:function(){var a=this._map.getPanes().tilePane;if(!this._container||a.empty)this._container=L.DomUtil.create("div","leaflet-layer",a),this._setOpacity(this.options.opacity)},_reset:function(){this._tiles=
+-{};this._initContainer();this._container.innerHTML=""},_update:function(){var a=this._map.getPixelBounds(),b=this.options.tileSize,c=new L.Point(Math.floor(a.min.x/b),Math.floor(a.min.y/b)),a=new L.Point(Math.floor(a.max.x/b),Math.floor(a.max.y/b)),c=new L.Bounds(c,a);this._addTilesFromCenterOut(c);this.options.unloadInvisibleTiles&&this._removeOtherTiles(c)},_addTilesFromCenterOut:function(a){for(var b=[],c=a.getCenter(),d=a.min.y;d<=a.max.y;d++)for(var e=a.min.x;e<=a.max.x;e++)e+":"+d in this._tiles||
+-b.push(new L.Point(e,d));b.sort(function(a,b){return a.distanceTo(c)-b.distanceTo(c)});this._tilesToLoad=b.length;a=0;for(d=this._tilesToLoad;a<d;a++)this._addTile(b[a])},_removeOtherTiles:function(a){var b,c,d;for(d in this._tiles)if(this._tiles.hasOwnProperty(d)&&(b=d.split(":"),c=parseInt(b[0],10),b=parseInt(b[1],10),c<a.min.x||c>a.max.x||b<a.min.y||b>a.max.y))this._tiles[d].src="",this._tiles[d].parentNode==this._container&&this._container.removeChild(this._tiles[d]),delete this._tiles[d]},_addTile:function(a){var b=
+-this._getTilePos(a),c=this._map.getZoom(),d=a.x+":"+a.y,e=1<<c;if(!this.options.noWrap)a.x=(a.x%e+e)%e;if(!(a.y<0||a.y>=e)){var f=this._createTile();L.DomUtil.setPosition(f,b);this._tiles[d]=f;if(this.options.scheme=="tms")a.y=e-a.y-1;this._loadTile(f,a,c);this._container.appendChild(f)}},_getTilePos:function(a){var b=this._map.getPixelOrigin();return a.multiplyBy(this.options.tileSize).subtract(b)},getTileUrl:function(a,b){return this._url.replace("{s}",this.options.subdomains[(a.x+a.y)%this.options.subdomains.length]).replace("{z}",
+-b).replace("{x}",a.x).replace("{y}",a.y)},_createTileProto:function(){this._tileImg=L.DomUtil.create("img","leaflet-tile");this._tileImg.galleryimg="no";var a=this.options.tileSize;this._tileImg.style.width=a+"px";this._tileImg.style.height=a+"px"},_createTile:function(){var a=this._tileImg.cloneNode(!1);a.onselectstart=a.onmousemove=L.Util.falseFn;return a},_loadTile:function(a,b,c){a._layer=this;a.onload=this._tileOnLoad;a.onerror=this._tileOnError;a.src=this.getTileUrl(b,c)},_tileOnLoad:function(){var a=
+-this._layer;this.className+=" leaflet-tile-loaded";a.fire("tileload",{tile:this,url:this.src});a._tilesToLoad--;a._tilesToLoad||a.fire("load")},_tileOnError:function(){var a=this._layer;a.fire("tileerror",{tile:this,url:this.src});if(a=a.options.errorTileUrl)this.src=a}});L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(a,b){this._url=a;this.wmsParams=L.Util.extend({},this.defaultWmsParams);this.wmsParams.width=this.wmsParams.height=this.options.tileSize;for(var c in b)this.options.hasOwnProperty(c)||(this.wmsParams[c]=b[c]);L.Util.setOptions(this,b)},onAdd:function(a){this.wmsParams[parseFloat(this.wmsParams.version)>=1.3?"crs":"srs"]=a.options.crs.code;
+-L.TileLayer.prototype.onAdd.call(this,a)},getTileUrl:function(a){var b=this.options.tileSize,a=a.multiplyBy(b),b=a.add(new L.Point(b,b)),a=this._map.unproject(a,this._zoom,!0),b=this._map.unproject(b,this._zoom,!0),a=this._map.options.crs.project(a),b=this._map.options.crs.project(b),b=[a.x,b.y,b.x,a.y].join(",");return this._url+L.Util.getParamString(this.wmsParams)+"&bbox="+b}});L.TileLayer.Canvas=L.TileLayer.extend({options:{async:!1},initialize:function(a){L.Util.setOptions(this,a)},_createTileProto:function(){this._canvasProto=L.DomUtil.create("canvas","leaflet-tile");var a=this.options.tileSize;this._canvasProto.width=a;this._canvasProto.height=a},_createTile:function(){var a=this._canvasProto.cloneNode(!1);a.onselectstart=a.onmousemove=L.Util.falseFn;return a},_loadTile:function(a,b,c){a._layer=this;this.drawTile(a,b,c);this.options.async||this.tileDrawn(a)},drawTile:function(){},
+-tileDrawn:function(a){this._tileOnLoad.call(a)}});L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,initialize:function(a,b){this._url=a;this._bounds=b},onAdd:function(a){this._map=a;this._image||this._initImage();a.getPanes().overlayPane.appendChild(this._image);a.on("viewreset",this._reset,this);this._reset()},onRemove:function(a){a.getPanes().overlayPane.removeChild(this._image);a.off("viewreset",this._reset,this)},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer");this._image.style.visibility="hidden";L.Util.extend(this._image,
+-{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:this._onImageLoad,src:this._url})},_reset:function(){var a=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),b=this._map.latLngToLayerPoint(this._bounds.getSouthEast()).subtract(a);L.DomUtil.setPosition(this._image,a);this._image.style.width=b.x+"px";this._image.style.height=b.y+"px"},_onImageLoad:function(){this.style.visibility=""}});L.Popup=L.Class.extend({includes:L.Mixin.Events,options:{maxWidth:300,autoPan:!0,closeButton:!0,offset:new L.Point(0,2),autoPanPadding:new L.Point(5,5)},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a;this._container||this._initLayout();this._updateContent();this._container.style.opacity="0";this._map._panes.popupPane.appendChild(this._container);this._map.on("viewreset",this._updatePosition,this);if(this._map.options.closePopupOnClick)this._map.on("preclick",this._close,
+-this);this._update();this._container.style.opacity="1";this._opened=!0},onRemove:function(a){a._panes.popupPane.removeChild(this._container);a.off("viewreset",this._updatePosition,this);a.off("click",this._close,this);this._container.style.opacity="0";this._opened=!1},setLatLng:function(a){this._latlng=a;this._opened&&this._update();return this},setContent:function(a){this._content=a;this._opened&&this._update();return this},_close:function(){this._opened&&this._map.removeLayer(this)},_initLayout:function(){this._container=
+-L.DomUtil.create("div","leaflet-popup");this._closeButton=L.DomUtil.create("a","leaflet-popup-close-button",this._container);this._closeButton.href="#close";this._closeButton.onclick=L.Util.bind(this._onCloseButtonClick,this);this._wrapper=L.DomUtil.create("div","leaflet-popup-content-wrapper",this._container);L.DomEvent.disableClickPropagation(this._wrapper);this._contentNode=L.DomUtil.create("div","leaflet-popup-content",this._wrapper);this._tipContainer=L.DomUtil.create("div","leaflet-popup-tip-container",
+-this._container);this._tip=L.DomUtil.create("div","leaflet-popup-tip",this._tipContainer)},_update:function(){this._container.style.visibility="hidden";this._updateContent();this._updateLayout();this._updatePosition();this._container.style.visibility="";this._adjustPan()},_updateContent:function(){if(this._content)typeof this._content=="string"?this._contentNode.innerHTML=this._content:(this._contentNode.innerHTML="",this._contentNode.appendChild(this._content))},_updateLayout:function(){this._container.style.width=
+-"";this._container.style.whiteSpace="nowrap";var a=this._container.offsetWidth;this._container.style.width=(a>this.options.maxWidth?this.options.maxWidth:a)+"px";this._container.style.whiteSpace="";this._containerWidth=this._container.offsetWidth},_updatePosition:function(){var a=this._map.latLngToLayerPoint(this._latlng);this._containerBottom=-a.y-this.options.offset.y;this._containerLeft=a.x-Math.round(this._containerWidth/2)+this.options.offset.x;this._container.style.bottom=this._containerBottom+
+-"px";this._container.style.left=this._containerLeft+"px"},_adjustPan:function(){if(this.options.autoPan){var a=this._container.offsetHeight,b=this._map.layerPointToContainerPoint(new L.Point(this._containerLeft,-a-this._containerBottom)),c=new L.Point(0,0),d=this.options.autoPanPadding,e=this._map.getSize();if(b.x<0)c.x=b.x-d.x;if(b.x+this._containerWidth>e.x)c.x=b.x+this._containerWidth-e.x+d.x;if(b.y<0)c.y=b.y-d.y;if(b.y+a>e.y)c.y=b.y+a-e.y+d.y;(c.x||c.y)&&this._map.panBy(c)}},_onCloseButtonClick:function(a){this._close();
+-L.DomEvent.stop(a)}});L.Icon=L.Class.extend({iconUrl:L.ROOT_URL+"images/marker.png",shadowUrl:L.ROOT_URL+"images/marker-shadow.png",iconSize:new L.Point(25,41),shadowSize:new L.Point(41,41),iconAnchor:new L.Point(13,41),popupAnchor:new L.Point(0,-33),initialize:function(a){if(a)this.iconUrl=a},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(a){var b=this[a+"Size"],c=this[a+"Url"],d=this._createImg(c);if(!c)return null;d.className="leaflet-marker-"+
+-a;d.style.marginLeft=-this.iconAnchor.x+"px";d.style.marginTop=-this.iconAnchor.y+"px";if(b)d.style.width=b.x+"px",d.style.height=b.y+"px";return d},_createImg:function(a){var b;L.Browser.ie6?(b=document.createElement("div"),b.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")'):(b=document.createElement("img"),b.src=a);return b}});L.Marker=L.Class.extend({includes:L.Mixin.Events,options:{icon:new L.Icon,title:"",clickable:!0,draggable:!1},initialize:function(a,b){L.Util.setOptions(this,b);this._latlng=a},onAdd:function(a){this._map=a;this._initIcon();a.on("viewreset",this._reset,this);this._reset()},onRemove:function(a){this._removeIcon();a.off("viewreset",this._reset,this)},getLatLng:function(){return this._latlng},setLatLng:function(a){this._latlng=a;this._reset()},setIcon:function(a){this._removeIcon();this._icon=this._shadow=
+-null;this.options.icon=a;this._initIcon()},_initIcon:function(){if(!this._icon){this._icon=this.options.icon.createIcon();if(this.options.title)this._icon.title=this.options.title;this._initInteraction()}if(!this._shadow)this._shadow=this.options.icon.createShadow();this._map._panes.markerPane.appendChild(this._icon);this._shadow&&this._map._panes.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this._map._panes.markerPane.removeChild(this._icon);this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow)},
+-_reset:function(){var a=this._map.latLngToLayerPoint(this._latlng).round();L.DomUtil.setPosition(this._icon,a);this._shadow&&L.DomUtil.setPosition(this._shadow,a);this._icon.style.zIndex=a.y},_initInteraction:function(){if(this.options.clickable){this._icon.className+=" leaflet-clickable";L.DomEvent.addListener(this._icon,"click",this._onMouseClick,this);for(var a=["dblclick","mousedown","mouseover","mouseout"],b=0;b<a.length;b++)L.DomEvent.addListener(this._icon,a[b],this._fireMouseEvent,this)}if(L.Handler.MarkerDrag)this.dragging=
+-new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable()},_onMouseClick:function(a){L.DomEvent.stopPropagation(a);(!this.dragging||!this.dragging.moved())&&this.fire(a.type)},_fireMouseEvent:function(a){this.fire(a.type);L.DomEvent.stopPropagation(a)}});L.Marker.include({openPopup:function(){this._popup.setLatLng(this._latlng);this._map.openPopup(this._popup);return this},closePopup:function(){this._popup&&this._popup._close()},bindPopup:function(a,b){b=L.Util.extend({offset:this.options.icon.popupAnchor},b);this._popup=new L.Popup(b);this._popup.setContent(a);this.on("click",this.openPopup,this);return this}});L.Path=L.Class.extend({includes:[L.Mixin.Events],statics:function(){return{SVG_NS:"http://www.w3.org/2000/svg",SVG:!(!document.createElementNS||!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect),CLIP_PADDING:0.5}}(),options:{stroke:!0,color:"#0033ff",weight:5,opacity:0.5,fill:!1,fillColor:null,fillOpacity:0.2,clickable:!0,updateOnMoveEnd:!1},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a;this._initElements();this._initEvents();this.projectLatlngs();
+-this._updatePath();a.on("viewreset",this.projectLatlngs,this);this._updateTrigger=this.options.updateOnMoveEnd?"moveend":"viewreset";a.on(this._updateTrigger,this._updatePath,this)},onRemove:function(a){a._pathRoot.removeChild(this._container);a.off("viewreset",this._projectLatlngs,this);a.off(this._updateTrigger,this._updatePath,this)},projectLatlngs:function(){},getPathString:function(){},setStyle:function(a){L.Util.setOptions(this,a);this._path&&this._updateStyle()},_initElements:function(){this._initRoot();
+-this._initPath();this._initStyle()},_initRoot:function(){if(!this._map._pathRoot)this._map._pathRoot=this._createElement("svg"),this._map._panes.overlayPane.appendChild(this._map._pathRoot),this._map.on("moveend",this._updateSvgViewport,this),this._updateSvgViewport()},_updateSvgViewport:function(){this._updateViewport();var a=this._map._pathViewport,b=a.min,c=a.max,a=c.x-b.x,c=c.y-b.y,d=this._map._pathRoot,e=this._map._panes.overlayPane;L.Browser.mobileWebkit&&e.removeChild(d);L.DomUtil.setPosition(d,
+-b);d.setAttribute("width",a);d.setAttribute("height",c);d.setAttribute("viewBox",[b.x,b.y,a,c].join(" "));L.Browser.mobileWebkit&&e.appendChild(d)},_updateViewport:function(){var a=L.Path.CLIP_PADDING,b=this._map.getSize(),c=L.DomUtil.getPosition(this._map._mapPane).multiplyBy(-1).subtract(b.multiplyBy(a)),a=c.add(b.multiplyBy(1+a*2));this._map._pathViewport=new L.Bounds(c,a)},_initPath:function(){this._container=this._createElement("g");this._path=this._createElement("path");this._container.appendChild(this._path);
+-this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round"));this.options.fill?this._path.setAttribute("fill-rule","evenodd"):this._path.setAttribute("fill","none");this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",
+-this.options.weight));this.options.fill&&(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity))},_updatePath:function(){var a=this.getPathString();a||(a="M0 0");this._path.setAttribute("d",a)},_createElement:function(a){return document.createElementNS(L.Path.SVG_NS,a)},_initEvents:function(){if(this.options.clickable){L.Path.VML||this._path.setAttribute("class","leaflet-clickable");L.DomEvent.addListener(this._container,
+-"click",this._onMouseClick,this);for(var a=["dblclick","mousedown","mouseover","mouseout"],b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this)}},_onMouseClick:function(a){(!this._map.dragging||!this._map.dragging.moved())&&this._fireMouseEvent(a)},_fireMouseEvent:function(a){this.hasEventListeners(a.type)&&(this.fire(a.type,{latlng:this._map.mouseEventToLatLng(a),layerPoint:this._map.mouseEventToLayerPoint(a)}),L.DomEvent.stopPropagation(a))},_redraw:function(){this.projectLatlngs();
+-this._updatePath()}});L.Path.VML=function(){var a=document.createElement("div");a.innerHTML='<v:shape adj="1"/>';a=a.firstChild;a.style.behavior="url(#default#VML)";return a&&typeof a.adj=="object"}();
+-L.Path=L.Path.SVG||!L.Path.VML?L.Path:L.Path.extend({statics:{CLIP_PADDING:0.02},_createElement:function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<lvml:"+a+' class="lvml">')}}catch(a){return function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initRoot:function(){if(!this._map._pathRoot)this._map._pathRoot=document.createElement("div"),this._map._pathRoot.className=
+-"leaflet-vml-container",this._map._panes.overlayPane.appendChild(this._map._pathRoot),this._map.on("moveend",this._updateViewport,this),this._updateViewport()},_initPath:function(){this._container=this._createElement("shape");this._container.className+=" leaflet-vml-shape"+(this.options.clickable?" leaflet-clickable":"");this._container.coordsize="1 1";this._path=this._createElement("path");this._container.appendChild(this._path);this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke?
+-(this._stroke=this._createElement("stroke"),this._stroke.endcap="round",this._container.appendChild(this._stroke)):this._container.stroked=!1;this.options.fill?(this._container.filled=!0,this._fill=this._createElement("fill"),this._container.appendChild(this._fill)):this._container.filled=!1;this._updateStyle()},_updateStyle:function(){if(this.options.stroke)this._stroke.weight=this.options.weight+"px",this._stroke.color=this.options.color,this._stroke.opacity=this.options.opacity;if(this.options.fill)this._fill.color=
+-this.options.fillColor||this.options.color,this._fill.opacity=this.options.fillOpacity},_updatePath:function(){this._container.style.display="none";this._path.v=this.getPathString()+" ";this._container.style.display=""}});L.Path.include({bindPopup:function(a,b){if(!this._popup||this._popup.options!==b)this._popup=new L.Popup(b);this._popup.setContent(a);if(!this._openPopupAdded)this.on("click",this._openPopup,this),this._openPopupAdded=!0;return this},_openPopup:function(a){this._popup.setLatLng(a.latlng);this._map.openPopup(this._popup)}});L.Polyline=L.Path.extend({initialize:function(a,b){L.Path.prototype.initialize.call(this,b);this._latlngs=a},options:{smoothFactor:1,noClip:!1,updateOnMoveEnd:!0},projectLatlngs:function(){this._originalPoints=[];for(var a=0,b=this._latlngs.length;a<b;a++)this._originalPoints[a]=this._map.latLngToLayerPoint(this._latlngs[a])},getPathString:function(){for(var a=0,b=this._parts.length,c="";a<b;a++)c+=this._getPathPartStr(this._parts[a]);return c},getLatLngs:function(){return this._latlngs},setLatLngs:function(a){this._latlngs=
+-a;this._redraw();return this},addLatLng:function(a){this._latlngs.push(a);this._redraw();return this},spliceLatLngs:function(){var a=[].splice.apply(this._latlngs,arguments);this._redraw();return a},_getPathPartStr:function(a){for(var b=L.Path.VML,c=0,d=a.length,e="",f;c<d;c++)f=a[c],b&&f._round(),e+=(c?"L":"M")+f.x+" "+f.y;return e},_clipPoints:function(){var a=this._originalPoints,b=a.length,c,d,e;if(this.options.noClip)this._parts=[a];else{var f=this._parts=[],g=this._map._pathViewport,h=L.LineUtil;
+-for(d=c=0;c<b-1;c++)if(e=h.clipSegment(a[c],a[c+1],g,c))if(f[d]=f[d]||[],f[d].push(e[0]),e[1]!=a[c+1]||c==b-2)f[d].push(e[1]),d++}},_simplifyPoints:function(){for(var a=this._parts,b=L.LineUtil,c=0,d=a.length;c<d;c++)a[c]=b.simplify(a[c],this.options.smoothFactor)},_updatePath:function(){this._clipPoints();this._simplifyPoints();L.Path.prototype._updatePath.call(this)}});L.Polygon=L.Polyline.extend({options:{fill:!0},initialize:function(a,b){L.Polyline.prototype.initialize.call(this,a,b);if(a[0]instanceof Array)this._latlngs=a[0],this._holes=a.slice(1)},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this);this._holePoints=[];if(this._holes)for(var a=0,b=this._holes.length;a<b;a++){this._holePoints[a]=[];for(var c=0,d=this._holes[a].length;c<d;c++)this._holePoints[a][c]=this._map.latLngToLayerPoint(this._holes[a][c])}},_clipPoints:function(){var a=
+-[];this._parts=[this._originalPoints].concat(this._holePoints);if(!this.options.noClip){for(var b=0,c=this._parts.length;b<c;b++){var d=L.PolyUtil.clipPolygon(this._parts[b],this._map._pathViewport);d.length&&a.push(d)}this._parts=a}},_getPathPartStr:function(a){return L.Polyline.prototype._getPathPartStr.call(this,a)+(L.Path.SVG?"z":"x")}});(function(){function a(a){return L.FeatureGroup.extend({initialize:function(c,d){this._layers={};for(var e=0,f=c.length;e<f;e++)this.addLayer(new a(c[e],d))},setStyle:function(a){for(var b in this._layers)this._layers.hasOwnProperty(b)&&this._layers[b].setStyle&&this._layers[b].setStyle(a)}})}L.MultiPolyline=a(L.Polyline);L.MultiPolygon=a(L.Polygon)})();L.Circle=L.Path.extend({initialize:function(a,b,c){L.Path.prototype.initialize.call(this,c);this._latlng=a;this._mRadius=b},options:{fill:!0},setLatLng:function(a){this._latlng=a;this._redraw();return this},setRadius:function(a){this._mRadius=a;this._redraw();return this},projectLatlngs:function(){var a=this._map.options.scale(this._map._zoom);this._point=this._map.latLngToLayerPoint(this._latlng);this._radius=this._mRadius/40075017*a},getPathString:function(){var a=this._point,b=this._radius;return L.Path.SVG?
+-"M"+a.x+","+(a.y-b)+"A"+b+","+b+",0,1,1,"+(a.x-0.1)+","+(a.y-b)+" z":(a._round(),b=Math.round(b),"AL "+a.x+","+a.y+" "+b+","+b+" 0,23592600")}});L.CircleMarker=L.Circle.extend({options:{radius:10,weight:2},initialize:function(a,b){L.Circle.prototype.initialize.call(this,a,null,b);this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},setRadius:function(a){this._radius=a;this._redraw();return this}});L.GeoJSON=L.LayerGroup.extend({includes:L.Mixin.Events,initialize:function(a,b){L.Util.setOptions(this,b);this._geojson=a;this._layers={};a&&this.addGeoJSON(a)},addGeoJSON:function(a){if(a.features)for(var b=0,c=a.features.length;b<c;b++)this.addGeoJSON(a.features[b]);else b=a.type=="Feature"?a.geometry:a,c=L.GeoJSON.geometryToLayer(b,this.options.pointToLayer),this.fire("featureparse",{layer:c,properties:a.properties,geometryType:b.type,bbox:a.bbox,id:a.id}),this.addLayer(c)}});
+-L.Util.extend(L.GeoJSON,{geometryToLayer:function(a,b){var c=a.coordinates,d,e,f,g=[];switch(a.type){case "Point":return d=this.coordsToLatLng(c),b?b(d):new L.Marker(d);case "MultiPoint":e=0;for(f=c.length;e<f;e++)d=this.coordsToLatLng(c[e]),d=b?b(d):new L.Marker(d),g.push(d);return new L.FeatureGroup(g);case "LineString":return c=this.coordsToLatLngs(c),new L.Polyline(c);case "Polygon":return c=this.coordsToLatLngs(c,1),new L.Polygon(c);case "MultiLineString":return c=this.coordsToLatLngs(c,1),new L.MultiPolyline(c);
+-case "MultiPolygon":return c=this.coordsToLatLngs(c,2),new L.MultiPolygon(c);case "GeometryCollection":e=0;for(f=a.geometries.length;e<f;e++)d=this.geometryToLayer(a.geometries[e]),g.push(d);return new L.FeatureGroup(g);default:throw Error("Invalid GeoJSON object.");}},coordsToLatLng:function(a,b){var c=parseFloat(a[b?0:1]),d=parseFloat(a[b?1:0]);return new L.LatLng(c,d)},coordsToLatLngs:function(a,b,c){var d,e=[],f,g=a.length;for(f=0;f<g;f++)d=b?this.coordsToLatLngs(a[f],b-1,c):this.coordsToLatLng(a[f],
+-c),e.push(d);return e}});L.Handler=L.Class.extend({initialize:function(a){this._map=a},enabled:function(){return!!this._enabled}});L.Handler.MapDrag=L.Handler.extend({enable:function(){if(!this._enabled){if(!this._draggable)this._draggable=new L.Draggable(this._map._mapPane,this._map._container),this._draggable.on("dragstart",this._onDragStart,this),this._draggable.on("drag",this._onDrag,this),this._draggable.on("dragend",this._onDragEnd,this);this._draggable.enable();this._enabled=!0}},disable:function(){if(this._enabled)this._draggable.disable(),this._enabled=!1},moved:function(){return this._draggable._moved},_onDragStart:function(){this._map.fire("movestart");
+-this._map.fire("dragstart")},_onDrag:function(){this._map.fire("move");this._map.fire("drag")},_onDragEnd:function(){this._map.fire("moveend");this._map.fire("dragend")}});L.Handler.TouchZoom=L.Handler.extend({enable:function(){if(L.Browser.mobileWebkit&&!this._enabled)L.DomEvent.addListener(this._map._container,"touchstart",this._onTouchStart,this),this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._map._container,"touchstart",this._onTouchStart,this),this._enabled=!1},_onTouchStart:function(a){if(a.touches&&!(a.touches.length!=2||this._map._animatingZoom)){var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]),
+-d=this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));this._startCenter=b.add(c).divideBy(2,!0);this._startDist=b.distanceTo(c);this._moved=!1;this._zooming=!0;this._centerOffset=d.subtract(this._startCenter);L.DomEvent.addListener(document,"touchmove",this._onTouchMove,this);L.DomEvent.addListener(document,"touchend",this._onTouchEnd,this);L.DomEvent.preventDefault(a)}},_onTouchMove:function(a){if(a.touches&&a.touches.length==2){if(!this._moved)this._map._mapPane.className+=" leaflet-zoom-anim",
+-this._map._prepareTileBg(),this._moved=!0;var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]);this._scale=b.distanceTo(c)/this._startDist;this._delta=b.add(c).divideBy(2,!0).subtract(this._startCenter);this._map._tileBg.style.webkitTransform=[L.DomUtil.getTranslateString(this._delta),L.DomUtil.getScaleString(this._scale,this._startCenter)].join(" ");L.DomEvent.preventDefault(a)}},_onTouchEnd:function(){if(this._moved&&this._zooming){this._zooming=
+-!1;var a=this._map.getZoom(),b=Math.log(this._scale)/Math.LN2,b=this._map._limitZoom(a+(b>0?Math.ceil(b):Math.floor(b))),a=b-a,c=this._centerOffset.subtract(this._delta).divideBy(this._scale),d=this._map.unproject(this._map.getPixelOrigin().add(this._startCenter).add(c));L.DomEvent.removeListener(document,"touchmove",this._onTouchMove);L.DomEvent.removeListener(document,"touchend",this._onTouchEnd);this._map._runAnimation(d,b,Math.pow(2,a)/this._scale,this._startCenter.add(c))}}});L.Handler.ScrollWheelZoom=L.Handler.extend({enable:function(){if(!this._enabled)L.DomEvent.addListener(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0,this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._map._container,"mousewheel",this._onWheelScroll),this._enabled=!1},_onWheelScroll:function(a){this._delta+=L.DomEvent.getWheelDelta(a);this._lastMousePos=this._map.mouseEventToContainerPoint(a);clearTimeout(this._timer);this._timer=setTimeout(L.Util.bind(this._performZoom,
+-this),50);L.DomEvent.preventDefault(a)},_performZoom:function(){var a=Math.round(this._delta);this._delta=0;if(a){var b=this._getCenterForScrollWheelZoom(this._lastMousePos,a),a=this._map.getZoom()+a;this._map._limitZoom(a)!=this._map._zoom&&this._map.setView(b,a)}},_getCenterForScrollWheelZoom:function(a,b){var c=this._map.getPixelBounds().getCenter(),d=this._map.getSize().divideBy(2),d=a.subtract(d).multiplyBy(1-Math.pow(2,-b));return this._map.unproject(c.add(d),this._map._zoom,!0)}});L.Handler.DoubleClickZoom=L.Handler.extend({enable:function(){if(!this._enabled)this._map.on("dblclick",this._onDoubleClick,this._map),this._enabled=!0},disable:function(){if(this._enabled)this._map.off("dblclick",this._onDoubleClick,this._map),this._enabled=!1},_onDoubleClick:function(a){this.setView(a.latlng,this._zoom+1)}});L.Handler.ShiftDragZoom=L.Handler.extend({initialize:function(a){this._map=a;this._container=a._container;this._pane=a._panes.overlayPane},enable:function(){if(!this._enabled)L.DomEvent.addListener(this._container,"mousedown",this._onMouseDown,this),this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._container,"mousedown",this._onMouseDown),this._enabled=!1},_onMouseDown:function(a){if(!a.shiftKey||a.which!=1&&a.button!=1)return!1;L.DomUtil.disableTextSelection();
+-this._startLayerPoint=this._map.mouseEventToLayerPoint(a);this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane);L.DomUtil.setPosition(this._box,this._startLayerPoint);this._container.style.cursor="crosshair";L.DomEvent.addListener(document,"mousemove",this._onMouseMove,this);L.DomEvent.addListener(document,"mouseup",this._onMouseUp,this);L.DomEvent.preventDefault(a)},_onMouseMove:function(a){var b=this._map.mouseEventToLayerPoint(a),a=b.x-this._startLayerPoint.x,c=b.y-this._startLayerPoint.y,
+-b=new L.Point(Math.min(b.x,this._startLayerPoint.x),Math.min(b.y,this._startLayerPoint.y));L.DomUtil.setPosition(this._box,b);this._box.style.width=Math.abs(a)-4+"px";this._box.style.height=Math.abs(c)-4+"px"},_onMouseUp:function(a){this._pane.removeChild(this._box);this._container.style.cursor="";L.DomUtil.enableTextSelection();L.DomEvent.removeListener(document,"mousemove",this._onMouseMove);L.DomEvent.removeListener(document,"mouseup",this._onMouseUp);a=this._map.mouseEventToLayerPoint(a);this._map.fitBounds(new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint),
+-this._map.layerPointToLatLng(a)))}});L.Handler.MarkerDrag=L.Handler.extend({initialize:function(a){this._marker=a},enable:function(){if(!this._enabled){if(!this._draggable)this._draggable=new L.Draggable(this._marker._icon,this._marker._icon),this._draggable.on("dragstart",this._onDragStart,this),this._draggable.on("drag",this._onDrag,this),this._draggable.on("dragend",this._onDragEnd,this);this._draggable.enable();this._enabled=!0}},disable:function(){if(this._enabled)this._draggable.disable(),this._enabled=!1},moved:function(){return this._draggable&&
+-this._draggable._moved},_onDragStart:function(){this._marker.closePopup();this._marker.fire("movestart");this._marker.fire("dragstart")},_onDrag:function(){var a=L.DomUtil.getPosition(this._marker._icon);L.DomUtil.setPosition(this._marker._shadow,a);this._marker._latlng=this._marker._map.layerPointToLatLng(a);this._marker.fire("move");this._marker.fire("drag")},_onDragEnd:function(){this._marker.fire("moveend");this._marker.fire("dragend")}});L.Control={};L.Control.Position={TOP_LEFT:"topLeft",TOP_RIGHT:"topRight",BOTTOM_LEFT:"bottomLeft",BOTTOM_RIGHT:"bottomRight"};L.Control.Zoom=L.Class.extend({onAdd:function(a){this._map=a;this._container=L.DomUtil.create("div","leaflet-control-zoom");this._zoomInButton=this._createButton("Zoom in","leaflet-control-zoom-in",this._map.zoomIn,this._map);this._zoomOutButton=this._createButton("Zoom out","leaflet-control-zoom-out",this._map.zoomOut,this._map);this._container.appendChild(this._zoomInButton);this._container.appendChild(this._zoomOutButton)},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_LEFT},
+-_createButton:function(a,b,c,d){var e=document.createElement("a");e.href="#";e.title=a;e.className=b;L.DomEvent.disableClickPropagation(e);L.DomEvent.addListener(e,"click",L.DomEvent.preventDefault);L.DomEvent.addListener(e,"click",c,d);return e}});L.Control.Attribution=L.Class.extend({onAdd:function(a){this._container=L.DomUtil.create("div","leaflet-control-attribution");this._map=a;this._prefix='Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';this._attributions={};this._update()},getPosition:function(){return L.Control.Position.BOTTOM_RIGHT},getContainer:function(){return this._container},setPrefix:function(a){this._prefix=a},addAttribution:function(a){a&&(this._attributions[a]=!0,this._update())},removeAttribution:function(a){a&&
+-(delete this._attributions[a],this._update())},_update:function(){if(this._map){var a=[],b;for(b in this._attributions)this._attributions.hasOwnProperty(b)&&a.push(b);b=[];this._prefix&&b.push(this._prefix);a.length&&b.push(a.join(", "));this._container.innerHTML=b.join(" &mdash; ")}}});L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857||L.CRS.EPSG4326,scale:function(a){return 256*(1<<a)},center:null,zoom:null,layers:[],dragging:!0,touchZoom:L.Browser.mobileWebkit&&!L.Browser.android,scrollWheelZoom:!L.Browser.mobileWebkit,doubleClickZoom:!0,shiftDragZoom:!0,zoomControl:!0,attributionControl:!0,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android,zoomAnimation:L.DomUtil.TRANSITION&&!L.Browser.android&&!L.Browser.mobileOpera,trackResize:!0,closePopupOnClick:!0},
+-initialize:function(a,b){L.Util.setOptions(this,b);this._container=L.DomUtil.get(a);this._initLayout();L.DomEvent&&(this._initEvents(),L.Handler&&this._initInteraction(),L.Control&&this._initControls());var c=this.options.center,d=this.options.zoom;c!==null&&d!==null&&this.setView(c,d,!0);c=this.options.layers;c=c instanceof Array?c:[c];this._tileLayersNum=0;this._initLayers(c)},setView:function(a,b){this._resetView(a,this._limitZoom(b));return this},setZoom:function(a){return this.setView(this.getCenter(),
+-a)},zoomIn:function(){return this.setZoom(this._zoom+1)},zoomOut:function(){return this.setZoom(this._zoom-1)},fitBounds:function(a){var b=this.getBoundsZoom(a);return this.setView(a.getCenter(),b)},fitWorld:function(){var a=new L.LatLng(-60,-170),b=new L.LatLng(85,179);return this.fitBounds(new L.LatLngBounds(a,b))},panTo:function(a){return this.setView(a,this._zoom)},panBy:function(a){this.fire("movestart");this._rawPanBy(a);this.fire("move");this.fire("moveend");return this},addLayer:function(a){var b=
+-L.Util.stamp(a);if(this._layers[b])return this;this._layers[b]=a;if(a.options&&!isNaN(a.options.maxZoom))this._layersMaxZoom=Math.max(this._layersMaxZoom||0,a.options.maxZoom);if(a.options&&!isNaN(a.options.minZoom))this._layersMinZoom=Math.min(this._layersMinZoom||Infinity,a.options.minZoom);this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum++,a.on("load",this._onTileLayerLoad,this));this.attributionControl&&a.getAttribution&&this.attributionControl.addAttribution(a.getAttribution());
+-b=function(){a.onAdd(this);this.fire("layeradd",{layer:a})};if(this._loaded)b.call(this);else this.on("load",b,this);return this},removeLayer:function(a){var b=L.Util.stamp(a);this._layers[b]&&(a.onRemove(this),delete this._layers[b],this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum--,a.off("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.removeAttribution(a.getAttribution()),this.fire("layerremove",{layer:a}));
+-return this},invalidateSize:function(){this._sizeChanged=!0;this.fire("move");clearTimeout(this._sizeTimer);this._sizeTimer=setTimeout(L.Util.bind(function(){this.fire("moveend")},this),200);return this},getCenter:function(a){var b=this.getSize().divideBy(2);return this.unproject(this._getTopLeftPoint().add(b),this._zoom,a)},getZoom:function(){return this._zoom},getBounds:function(){var a=this.getPixelBounds(),b=this.unproject(new L.Point(a.min.x,a.max.y)),a=this.unproject(new L.Point(a.max.x,a.min.y));
+-return new L.LatLngBounds(b,a)},getMinZoom:function(){return isNaN(this.options.minZoom)?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return isNaN(this.options.maxZoom)?this._layersMaxZoom||Infinity:this.options.maxZoom},getBoundsZoom:function(a){var b=this.getSize(),c=this.getMinZoom(),d=this.getMaxZoom(),e=a.getNorthEast(),a=a.getSouthWest(),f,g;do c++,f=this.project(e,c),g=this.project(a,c),f=new L.Point(f.x-g.x,g.y-f.y);while(f.x<=b.x&&f.y<=b.y&&c<=d);return c-1},getSize:function(){if(!this._size||
+-this._sizeChanged)this._size=new L.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1;return this._size},getPixelBounds:function(){var a=this._getTopLeftPoint(),b=this.getSize();return new L.Bounds(a,a.add(b))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},mouseEventToContainerPoint:function(a){return L.DomEvent.getMousePosition(a,this._container)},mouseEventToLayerPoint:function(a){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))},
+-mouseEventToLatLng:function(a){return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))},containerPointToLayerPoint:function(a){return a.subtract(L.DomUtil.getPosition(this._mapPane))},layerPointToContainerPoint:function(a){return a.add(L.DomUtil.getPosition(this._mapPane))},layerPointToLatLng:function(a){return this.unproject(a.add(this._initialTopLeftPoint))},latLngToLayerPoint:function(a){return this.project(a)._subtract(this._initialTopLeftPoint)},project:function(a,b){b=typeof b=="undefined"?
+-this._zoom:b;return this.options.crs.latLngToPoint(a,this.options.scale(b))},unproject:function(a,b,c){b=typeof b=="undefined"?this._zoom:b;return this.options.crs.pointToLatLng(a,this.options.scale(b),c)},_initLayout:function(){var a=this._container;a.className+=" leaflet-container";this.options.fadeAnimation&&(a.className+=" leaflet-fade-anim");var b=L.DomUtil.getStyle(a,"position");if(b!="absolute"&&b!="relative")a.style.position="relative";this._initPanes();this._initControlPos&&this._initControlPos()},
+-_initPanes:function(){var a=this._panes={};this._mapPane=a.mapPane=this._createPane("leaflet-map-pane",this._container);this._tilePane=a.tilePane=this._createPane("leaflet-tile-pane",this._mapPane);this._objectsPane=a.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane);a.shadowPane=this._createPane("leaflet-shadow-pane");a.overlayPane=this._createPane("leaflet-overlay-pane");a.markerPane=this._createPane("leaflet-marker-pane");a.popupPane=this._createPane("leaflet-popup-pane")},_createPane:function(a,
+-b){return L.DomUtil.create("div",a,b||this._objectsPane)},_resetView:function(a,b,c){var d=this._zoom!=b;this.fire("movestart");this._zoom=b;this._initialTopLeftPoint=this._getNewTopLeftPoint(a);c?this._initialTopLeftPoint._add(L.DomUtil.getPosition(this._mapPane)):L.DomUtil.setPosition(this._mapPane,new L.Point(0,0));this._tileLayersToLoad=this._tileLayersNum;this.fire("viewreset");this.fire("move");d&&this.fire("zoomend");this.fire("moveend");if(!this._loaded)this._loaded=!0,this.fire("load")},
+-_initLayers:function(a){this._layers={};for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},_initControls:function(){this.options.zoomControl&&this.addControl(new L.Control.Zoom);if(this.options.attributionControl)this.attributionControl=new L.Control.Attribution,this.addControl(this.attributionControl)},_rawPanBy:function(a){var b=L.DomUtil.getPosition(this._mapPane);L.DomUtil.setPosition(this._mapPane,b.subtract(a))},_initEvents:function(){L.DomEvent.addListener(this._container,"click",this._onMouseClick,
+-this);for(var a=["dblclick","mousedown","mouseenter","mouseleave","mousemove"],b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this);this.options.trackResize&&L.DomEvent.addListener(window,"resize",this.invalidateSize,this)},_onMouseClick:function(a){if(!this.dragging||!this.dragging.moved())this.fire("pre"+a.type),this._fireMouseEvent(a)},_fireMouseEvent:function(a){var b=a.type,b=b=="mouseenter"?"mouseover":b=="mouseleave"?"mouseout":b;this.hasEventListeners(b)&&
+-this.fire(b,{latlng:this.mouseEventToLatLng(a),layerPoint:this.mouseEventToLayerPoint(a)})},_initInteraction:function(){var a={dragging:L.Handler.MapDrag,touchZoom:L.Handler.TouchZoom,doubleClickZoom:L.Handler.DoubleClickZoom,scrollWheelZoom:L.Handler.ScrollWheelZoom,shiftDragZoom:L.Handler.ShiftDragZoom},b;for(b in a)a.hasOwnProperty(b)&&a[b]&&(this[b]=new a[b](this),this.options[b]&&this[b].enable())},_onTileLayerLoad:function(){this._tileLayersToLoad--;if(this._tileLayersNum&&!this._tileLayersToLoad&&
+-this._tileBg)clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(L.Util.bind(this._clearTileBg,this),500)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(L.DomUtil.getPosition(this._mapPane))},_getNewTopLeftPoint:function(a){var b=this.getSize().divideBy(2);return this.project(a).subtract(b).round()},_limitZoom:function(a){var b=this.getMinZoom(),c=this.getMaxZoom();return Math.max(b,Math.min(c,
+-a))}});L.Map.include({locate:function(a){var b={timeout:1E4};L.Util.extend(b,a);navigator.geolocation?navigator.geolocation.getCurrentPosition(L.Util.bind(this._handleGeolocationResponse,this),L.Util.bind(this._handleGeolocationError,this),b):this.fire("locationerror",{code:0,message:"Geolocation not supported."});return this},locateAndSetView:function(a,b){this._setViewOnLocate=!0;this._maxLocateZoom=a||Infinity;return this.locate(b)},_handleGeolocationError:function(a){var a=a.code,b=a==1?"permission denied":
+-a==2?"position unavailable":"timeout";if(this._setViewOnLocate)this.fitWorld(),this._setViewOnLocate=!1;this.fire("locationerror",{code:a,message:"Geolocation error: "+b+"."})},_handleGeolocationResponse:function(a){var b=180*a.coords.accuracy/4E7,c=b*2,d=a.coords.latitude,e=a.coords.longitude,f=new L.LatLng(d-b,e-c),b=new L.LatLng(d+b,e+c),f=new L.LatLngBounds(f,b);if(this._setViewOnLocate)b=Math.min(this.getBoundsZoom(f),this._maxLocateZoom),this.setView(f.getCenter(),b),this._setViewOnLocate=!1;
+-this.fire("locationfound",{latlng:new L.LatLng(d,e),bounds:f,accuracy:a.coords.accuracy})}});L.Map.include({openPopup:function(a){this.closePopup();this._popup=a;return this.addLayer(a)},closePopup:function(){this._popup&&this.removeLayer(this._popup);return this}});L.Map.include(!L.Transition||!L.Transition.implemented()?{}:{setView:function(a,b,c){var b=this._limitZoom(b),d=this._zoom!=b;if(this._loaded&&!c&&this._layers&&(c=this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint()),d?this._zoomToIfCenterInView&&this._zoomToIfCenterInView(a,b,c):this._panByIfClose(c)))return this;this._resetView(a,b);return this},panBy:function(a){if(!this._panTransition)this._panTransition=new L.Transition(this._mapPane,{duration:0.3}),this._panTransition.on("step",this._onPanTransitionStep,
+-this),this._panTransition.on("end",this._onPanTransitionEnd,this);this.fire(this,"movestart");this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)});return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){this.fire("moveend")},_panByIfClose:function(a){if(this._offsetIsWithinView(a))return this.panBy(a),!0;return!1},_offsetIsWithinView:function(a,b){var c=b||1,d=this.getSize();return Math.abs(a.x)<=d.x*c&&Math.abs(a.y)<=d.y*c}});L.Map.include(!L.DomUtil.TRANSITION?{}:{_zoomToIfCenterInView:function(a,b,c){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var d=Math.pow(2,b-this._zoom),c=c.divideBy(1-1/d);if(!this._offsetIsWithinView(c,1))return!1;this._mapPane.className+=" leaflet-zoom-anim";c=this.containerPointToLayerPoint(this.getSize().divideBy(2)).add(c);this._prepareTileBg();this._runAnimation(a,b,d,c);return!0},_runAnimation:function(a,b,c,d){this._animatingZoom=!0;this._animateToCenter=a;this._animateToZoom=
+-b;a=L.DomUtil.TRANSFORM;if(L.Browser.gecko||window.opera)this._tileBg.style[a]+=" translate(0,0)";L.Browser.android?(this._tileBg.style[a+"Origin"]=d.x+"px "+d.y+"px",c="scale("+c+")"):c=L.DomUtil.getScaleString(c,d);L.Util.falseFn(this._tileBg.offsetWidth);d={};d[a]=this._tileBg.style[a]+" "+c;this._tileBg.transition.run(d)},_prepareTileBg:function(){if(!this._tileBg)this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),this._tileBg.style.zIndex=1;var a=this._tilePane,b=this._tileBg;b.style[L.DomUtil.TRANSFORM]=
+-"";b.style.visibility="hidden";b.empty=!0;a.empty=!1;this._tilePane=this._panes.tilePane=b;this._tileBg=a;if(!this._tileBg.transition)this._tileBg.transition=new L.Transition(this._tileBg,{duration:0.3,easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}),this._tileBg.transition.on("end",this._onZoomTransitionEnd,this);this._stopLoadingBgTiles()},_stopLoadingBgTiles:function(){for(var a=[].slice.call(this._tileBg.getElementsByTagName("img")),b=0,c=a.length;b<c;b++)if(!a[b].complete)a[b].src="",a[b].parentNode.removeChild(a[b])},
+-_onZoomTransitionEnd:function(){this._restoreTileFront();L.Util.falseFn(this._tileBg.offsetWidth);this._resetView(this._animateToCenter,this._animateToZoom,!0);this._mapPane.className=this._mapPane.className.replace(" leaflet-zoom-anim","");this._animatingZoom=!1},_restoreTileFront:function(){this._tilePane.innerHTML="";this._tilePane.style.visibility="";this._tilePane.style.zIndex=2;this._tileBg.style.zIndex=1},_clearTileBg:function(){if(!this._animatingZoom&&!this.touchZoom._zooming)this._tileBg.innerHTML=
+-""}});L.Map.include({addControl:function(a){a.onAdd(this);var b=a.getPosition(),c=this._controlCorners[b],a=a.getContainer();L.DomUtil.addClass(a,"leaflet-control");b.indexOf("bottom")!=-1?c.insertBefore(a,c.firstChild):c.appendChild(a);return this},removeControl:function(a){var b=this._controlCorners[a.getPosition()],c=a.getContainer();b.removeChild(c);if(a.onRemove)a.onRemove(this);return this},_initControlPos:function(){var a=this._controlCorners={},b=L.DomUtil.create("div","leaflet-control-container",
+-this._container);L.Browser.mobileWebkit&&(b.className+=" leaflet-big-buttons");a.topLeft=L.DomUtil.create("div","leaflet-top leaflet-left",b);a.topRight=L.DomUtil.create("div","leaflet-top leaflet-right",b);a.bottomLeft=L.DomUtil.create("div","leaflet-bottom leaflet-left",b);a.bottomRight=L.DomUtil.create("div","leaflet-bottom leaflet-right",b)}});
++(function(a) {
++  var b = {VERSION:"0.2", ROOT_URL:function() {
++    for(var a = document.getElementsByTagName("script"), b = /^(.*\/)leaflet-?([\w-]*)\.js.*$/, e = 0, f = a.length;e < f;e++) {
++      var g = a[e].src;
++      if(g = g && g.match(b)) {
++        if(g[2] == "include") {
++          break
++        }
++        return g[1]
++      }
++    }
++    return"../../dist/"
++  }(), noConflict:function() {
++    a.L = this._originalL;
++    return this
++  }, _originalL:a.L};
++  window.L = b
++})(this);
++L.Util = {extend:function(a) {
++  for(var b = Array.prototype.slice.call(arguments, 1), c = 0, d = b.length, e;c < d;c++) {
++    e = b[c] || {};
++    for(var f in e) {
++      e.hasOwnProperty(f) && (a[f] = e[f])
++    }
++  }
++  return a
++}, bind:function(a, b) {
++  return function() {
++    return a.apply(b, arguments)
++  }
++}, stamp:function() {
++  var a = 0;
++  return function(b) {
++    b._leaflet_id = b._leaflet_id || ++a;
++    return b._leaflet_id
++  }
++}(), requestAnimFrame:function() {
++  function a(a) {
++    window.setTimeout(a, 1E3 / 60)
++  }
++  var b = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || a;
++  return function(c, d, e) {
++    c = d ? L.Util.bind(c, d) : d;
++    e && b === a ? c() : b(c)
++  }
++}(), limitExecByInterval:function(a, b, c) {
++  function d() {
++    e = !1;
++    f && (g.callee.apply(c, g), f = !1)
++  }
++  var e, f, g;
++  return function() {
++    g = arguments;
++    e ? f = !0 : (e = !0, setTimeout(d, b), a.apply(c, g))
++  }
++}, falseFn:function() {
++  return!1
++}, formatNum:function(a, b) {
++  var c = Math.pow(10, b || 5);
++  return Math.round(a * c) / c
++}, setOptions:function(a, b) {
++  a.options = L.Util.extend({}, a.options, b)
++}, getParamString:function(a) {
++  var b = [], c;
++  for(c in a) {
++    a.hasOwnProperty(c) && b.push(c + "=" + a[c])
++  }
++  return"?" + b.join("&")
++}};
++L.Class = function() {
++};
++L.Class.extend = function(a) {
++  var b = function() {
++    !L.Class._prototyping && this.initialize && this.initialize.apply(this, arguments)
++  };
++  L.Class._prototyping = !0;
++  var c = new this;
++  L.Class._prototyping = !1;
++  c.constructor = b;
++  b.prototype = c;
++  c.superclass = this.prototype;
++  a.statics && (L.Util.extend(b, a.statics), delete a.statics);
++  a.includes && (L.Util.extend.apply(null, [c].concat(a.includes)), delete a.includes);
++  if(a.options && c.options) {
++    a.options = L.Util.extend({}, c.options, a.options)
++  }
++  L.Util.extend(c, a);
++  b.extend = arguments.callee;
++  b.include = function(a) {
++    L.Util.extend(this.prototype, a)
++  };
++  for(var d in this) {
++    this.hasOwnProperty(d) && d != "prototype" && (b[d] = this[d])
++  }
++  return b
++};
++L.Mixin = {};
++L.Mixin.Events = {addEventListener:function(a, b, c) {
++  var d = this._leaflet_events = this._leaflet_events || {};
++  d[a] = d[a] || [];
++  d[a].push({action:b, context:c});
++  return this
++}, hasEventListeners:function(a) {
++  return"_leaflet_events" in this && a in this._leaflet_events && this._leaflet_events[a].length > 0
++}, removeEventListener:function(a, b, c) {
++  if(!this.hasEventListeners(a)) {
++    return this
++  }
++  for(var d = 0, e = this._leaflet_events, f = e[a].length;d < f;d++) {
++    if(e[a][d].action === b && (!c || e[a][d].context === c)) {
++      e[a].splice(d, 1);
++      break
++    }
++  }
++  return this
++}, fireEvent:function(a, b) {
++  if(this.hasEventListeners(a)) {
++    for(var c = L.Util.extend({type:a, target:this}, b), d = this._leaflet_events[a].slice(), e = 0, f = d.length;e < f;e++) {
++      d[e].action.call(d[e].context || this, c)
++    }
++    return this
++  }
++}};
++L.Mixin.Events.on = L.Mixin.Events.addEventListener;
++L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
++L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
++(function() {
++  var a = navigator.userAgent.toLowerCase(), b = !!window.ActiveXObject, c = a.indexOf("webkit") != -1, d = a.indexOf("mobi") != -1, e = a.indexOf("android") != -1, f = window.opera;
++  L.Browser = {ie:b, ie6:b && !window.XMLHttpRequest, webkit:c, webkit3d:c && "WebKitCSSMatrix" in window && "m11" in new WebKitCSSMatrix, mobileWebkit:c && (d || e), mobileOpera:d && f, gecko:a.indexOf("gecko") != -1, android:e};
++  L.Browser.touch = L.Browser.mobileWebkit || L.Browser.mobileOpera
++})();
++L.Point = function(a, b, c) {
++  this.x = c ? Math.round(a) : a;
++  this.y = c ? Math.round(b) : b
++};
++L.Point.prototype = {add:function(a) {
++  return this.clone()._add(a)
++}, _add:function(a) {
++  this.x += a.x;
++  this.y += a.y;
++  return this
++}, subtract:function(a) {
++  return this.clone()._subtract(a)
++}, _subtract:function(a) {
++  this.x -= a.x;
++  this.y -= a.y;
++  return this
++}, divideBy:function(a, b) {
++  return new L.Point(this.x / a, this.y / a, b)
++}, multiplyBy:function(a) {
++  return new L.Point(this.x * a, this.y * a)
++}, distanceTo:function(a) {
++  var b = a.x - this.x, a = a.y - this.y;
++  return Math.sqrt(b * b + a * a)
++}, round:function() {
++  return this.clone()._round()
++}, _round:function() {
++  this.x = Math.round(this.x);
++  this.y = Math.round(this.y);
++  return this
++}, clone:function() {
++  return new L.Point(this.x, this.y)
++}, toString:function() {
++  return"Point(" + L.Util.formatNum(this.x) + ", " + L.Util.formatNum(this.y) + ")"
++}};
++L.Bounds = L.Class.extend({initialize:function(a, b) {
++  if(a) {
++    for(var c = a instanceof Array ? a : [a, b], d = 0, e = c.length;d < e;d++) {
++      this.extend(c[d])
++    }
++  }
++}, extend:function(a) {
++  !this.min && !this.max ? (this.min = new L.Point(a.x, a.y), this.max = new L.Point(a.x, a.y)) : (this.min.x = Math.min(a.x, this.min.x), this.max.x = Math.max(a.x, this.max.x), this.min.y = Math.min(a.y, this.min.y), this.max.y = Math.max(a.y, this.max.y))
++}, getCenter:function(a) {
++  return new L.Point((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, a)
++}, contains:function(a) {
++  var b;
++  if(a instanceof L.Bounds) {
++    b = a.min, a = a.max
++  }
++  return b.x >= this.min.x && a.x <= this.max.x && b.y >= this.min.y && a.y <= this.max.y
++}});
++L.Transformation = L.Class.extend({initialize:function(a, b, c, d) {
++  this._a = a;
++  this._b = b;
++  this._c = c;
++  this._d = d
++}, transform:function(a, b) {
++  return this._transform(a.clone(), b)
++}, _transform:function(a, b) {
++  b = b || 1;
++  a.x = b * (this._a * a.x + this._b);
++  a.y = b * (this._c * a.y + this._d);
++  return a
++}, untransform:function(a, b) {
++  b = b || 1;
++  return new L.Point((a.x / b - this._b) / this._a, (a.y / b - this._d) / this._c)
++}});
++L.LineUtil = {simplify:function(a, b) {
++  if(!b) {
++    return a.slice()
++  }
++  a = this.reducePoints(a, b);
++  return a = this.simplifyDP(a, b)
++}, pointToSegmentDistance:function(a, b, c) {
++  return Math.sqrt(this._sqPointToSegmentDist(a, b, c))
++}, simplifyDP:function(a, b) {
++  for(var c = 0, d = 0, e = b * b, f = 1, g = a.length, h;f < g - 1;f++) {
++    h = this._sqPointToSegmentDist(a[f], a[0], a[g - 1]), h > c && (d = f, c = h)
++  }
++  return c >= e ? (c = a.slice(0, d), d = a.slice(d), g = this.simplifyDP(c, b).slice(0, g - 2), d = this.simplifyDP(d, b), g.concat(d)) : [a[0], a[g - 1]]
++}, reducePoints:function(a, b) {
++  for(var c = [a[0]], d = b * b, e = 1, f = 0, g = a.length;e < g;e++) {
++    this._sqDist(a[e], a[f]) < d || (c.push(a[e]), f = e)
++  }
++  f < g - 1 && c.push(a[g - 1]);
++  return c
++}, clipSegment:function(a, b, c, d) {
++  var d = d ? this._lastCode : this._getBitCode(a, c), e = this._getBitCode(b, c);
++  for(this._lastCode = e;;) {
++    if(d | e) {
++      if(d & e) {
++        return!1
++      }else {
++        var f = d || e, g = this._getEdgeIntersection(a, b, f, c), h = this._getBitCode(g, c);
++        f == d ? (a = g, d = h) : (b = g, e = h)
++      }
++    }else {
++      return[a, b]
++    }
++  }
++}, _getEdgeIntersection:function(a, b, c, d) {
++  var e = b.x - a.x, b = b.y - a.y, f = d.min, d = d.max;
++  if(c & 8) {
++    return new L.Point(a.x + e * (d.y - a.y) / b, d.y)
++  }else {
++    if(c & 4) {
++      return new L.Point(a.x + e * (f.y - a.y) / b, f.y)
++    }else {
++      if(c & 2) {
++        return new L.Point(d.x, a.y + b * (d.x - a.x) / e)
++      }else {
++        if(c & 1) {
++          return new L.Point(f.x, a.y + b * (f.x - a.x) / e)
++        }
++      }
++    }
++  }
++}, _getBitCode:function(a, b) {
++  var c = 0;
++  a.x < b.min.x ? c |= 1 : a.x > b.max.x && (c |= 2);
++  a.y < b.min.y ? c |= 4 : a.y > b.max.y && (c |= 8);
++  return c
++}, _sqDist:function(a, b) {
++  var c = b.x - a.x, d = b.y - a.y;
++  return c * c + d * d
++}, _sqPointToSegmentDist:function(a, b, c) {
++  var d = c.x - b.x, e = c.y - b.y;
++  if(!d && !e) {
++    return this._sqDist(a, b)
++  }
++  var f = ((a.x - b.x) * d + (a.y - b.y) * e) / this._sqDist(b, c);
++  if(f < 0) {
++    return this._sqDist(a, b)
++  }
++  if(f > 1) {
++    return this._sqDist(a, c)
++  }
++  b = new L.Point(b.x + d * f, b.y + e * f);
++  return this._sqDist(a, b)
++}};
++L.PolyUtil = {};
++L.PolyUtil.clipPolygon = function(a, b) {
++  var c, d = [1, 4, 2, 8], e, f, g, h, j, k, l = L.LineUtil;
++  e = 0;
++  for(j = a.length;e < j;e++) {
++    a[e]._code = l._getBitCode(a[e], b)
++  }
++  for(g = 0;g < 4;g++) {
++    k = d[g];
++    c = [];
++    e = 0;
++    j = a.length;
++    for(f = j - 1;e < j;f = e++) {
++      if(h = a[e], f = a[f], h._code & k) {
++        if(!(f._code & k)) {
++          f = l._getEdgeIntersection(f, h, k, b), f._code = l._getBitCode(f, b), c.push(f)
++        }
++      }else {
++        if(f._code & k) {
++          f = l._getEdgeIntersection(f, h, k, b), f._code = l._getBitCode(f, b), c.push(f)
++        }
++        c.push(h)
++      }
++    }
++    a = c
++  }
++  return a
++};
++L.DomEvent = {addListener:function(a, b, c, d) {
++  function e(b) {
++    return c.call(d || a, b || L.DomEvent._getEvent())
++  }
++  var f = L.Util.stamp(c);
++  if(L.Browser.touch && b == "dblclick" && this.addDoubleTapListener) {
++    this.addDoubleTapListener(a, e, f)
++  }else {
++    if("addEventListener" in a) {
++      if(b == "mousewheel") {
++        a.addEventListener("DOMMouseScroll", e, !1), a.addEventListener(b, e, !1)
++      }else {
++        if(b == "mouseenter" || b == "mouseleave") {
++          var g = e, e = function(b) {
++            if(L.DomEvent._checkMouse(a, b)) {
++              return g(b)
++            }
++          };
++          a.addEventListener(b == "mouseenter" ? "mouseover" : "mouseout", e, !1)
++        }else {
++          a.addEventListener(b, e, !1)
++        }
++      }
++    }else {
++      "attachEvent" in a && a.attachEvent("on" + b, e)
++    }
++  }
++  a["_leaflet_" + b + f] = e
++}, removeListener:function(a, b, c) {
++  var c = L.Util.stamp(c), d = "_leaflet_" + b + c;
++  handler = a[d];
++  L.Browser.mobileWebkit && b == "dblclick" && this.removeDoubleTapListener ? this.removeDoubleTapListener(a, c) : "removeEventListener" in a ? b == "mousewheel" ? (a.removeEventListener("DOMMouseScroll", handler, !1), a.removeEventListener(b, handler, !1)) : b == "mouseenter" || b == "mouseleave" ? a.removeEventListener(b == "mouseenter" ? "mouseover" : "mouseout", handler, !1) : a.removeEventListener(b, handler, !1) : "detachEvent" in a && a.detachEvent("on" + b, handler);
++  a[d] = null
++}, _checkMouse:function(a, b) {
++  var c = b.relatedTarget;
++  if(!c) {
++    return!0
++  }
++  try {
++    for(;c && c != a;) {
++      c = c.parentNode
++    }
++  }catch(d) {
++    return!1
++  }
++  return c != a
++}, _getEvent:function() {
++  var a = window.event;
++  if(!a) {
++    for(var b = arguments.callee.caller;b;) {
++      if((a = b.arguments[0]) && Event == a.constructor) {
++        break
++      }
++      b = b.caller
++    }
++  }
++  return a
++}, stopPropagation:function(a) {
++  a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0
++}, disableClickPropagation:function(a) {
++  L.DomEvent.addListener(a, "mousedown", L.DomEvent.stopPropagation);
++  L.DomEvent.addListener(a, "click", L.DomEvent.stopPropagation);
++  L.DomEvent.addListener(a, "dblclick", L.DomEvent.stopPropagation)
++}, preventDefault:function(a) {
++  a.preventDefault ? a.preventDefault() : a.returnValue = !1
++}, stop:function(a) {
++  L.DomEvent.preventDefault(a);
++  L.DomEvent.stopPropagation(a)
++}, getMousePosition:function(a, b) {
++  var c = new L.Point(a.pageX ? a.pageX : a.clientX + document.body.scrollLeft + document.documentElement.scrollLeft, a.pageY ? a.pageY : a.clientY + document.body.scrollTop + document.documentElement.scrollTop);
++  return b ? c.subtract(L.DomUtil.getCumulativeOffset(b)) : c
++}, getWheelDelta:function(a) {
++  var b = 0;
++  a.wheelDelta && (b = a.wheelDelta / 120);
++  a.detail && (b = -a.detail / 3);
++  return b
++}};
++L.Util.extend(L.DomEvent, {addDoubleTapListener:function(a, b, c) {
++  function d(a) {
++    if(a.touches.length == 1) {
++      var b = Date.now(), c = b - (f || b);
++      j = a.touches[0];
++      g = c > 0 && c <= h;
++      f = b
++    }
++  }
++  function e() {
++    if(g) {
++      j.type = "dblclick", b(j), f = null
++    }
++  }
++  var f, g = !1, h = 250, j;
++  a["_leaflet_touchstart" + c] = d;
++  a["_leaflet_touchend" + c] = e;
++  a.addEventListener("touchstart", d, !1);
++  a.addEventListener("touchend", e, !1)
++}, removeDoubleTapListener:function(a, b) {
++  a.removeEventListener(a, a["_leaflet_touchstart" + b], !1);
++  a.removeEventListener(a, a["_leaflet_touchend" + b], !1)
++}});
++L.DomUtil = {get:function(a) {
++  return typeof a == "string" ? document.getElementById(a) : a
++}, getStyle:function(a, b) {
++  var c = a.style[b];
++  !c && a.currentStyle && (c = a.currentStyle[b]);
++  if(!c || c == "auto") {
++    c = (c = document.defaultView.getComputedStyle(a, null)) ? c[b] : null
++  }
++  return c == "auto" ? null : c
++}, getCumulativeOffset:function(a) {
++  var b = 0, c = 0;
++  do {
++    b += a.offsetTop || 0, c += a.offsetLeft || 0, a = a.offsetParent
++  }while(a);
++  return new L.Point(c, b)
++}, create:function(a, b, c) {
++  a = document.createElement(a);
++  a.className = b;
++  c && c.appendChild(a);
++  return a
++}, disableTextSelection:function() {
++  document.selection && document.selection.empty && document.selection.empty();
++  if(!this._onselectstart) {
++    this._onselectstart = document.onselectstart, document.onselectstart = L.Util.falseFn
++  }
++}, enableTextSelection:function() {
++  document.onselectstart = this._onselectstart;
++  this._onselectstart = null
++}, CLASS_RE:/(\\s|^)'+cls+'(\\s|$)/, hasClass:function(a, b) {
++  return a.className.length > 0 && RegExp("(^|\\s)" + b + "(\\s|$)").test(a.className)
++}, addClass:function(a, b) {
++  L.DomUtil.hasClass(a, b) || (a.className += (a.className ? " " : "") + b)
++}, setOpacity:function(a, b) {
++  L.Browser.ie ? a.style.filter = "alpha(opacity=" + Math.round(b * 100) + ")" : a.style.opacity = b
++}, testProp:function(a) {
++  for(var b = document.documentElement.style, c = 0;c < a.length;c++) {
++    if(a[c] in b) {
++      return a[c]
++    }
++  }
++  return!1
++}, getTranslateString:function(a) {
++  return L.DomUtil.TRANSLATE_OPEN + a.x + "px," + a.y + "px" + L.DomUtil.TRANSLATE_CLOSE
++}, getScaleString:function(a, b) {
++  return L.DomUtil.getTranslateString(b) + " scale(" + a + ") " + L.DomUtil.getTranslateString(b.multiplyBy(-1))
++}, setPosition:function(a, b) {
++  a._leaflet_pos = b;
++  L.Browser.webkit ? a.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(b) : (a.style.left = b.x + "px", a.style.top = b.y + "px")
++}, getPosition:function(a) {
++  return a._leaflet_pos
++}};
++L.Util.extend(L.DomUtil, {TRANSITION:L.DomUtil.testProp(["transition", "webkitTransition", "OTransition", "MozTransition", "msTransition"]), TRANSFORM:L.DomUtil.testProp(["transformProperty", "WebkitTransform", "OTransform", "MozTransform", "msTransform"]), TRANSLATE_OPEN:"translate" + (L.Browser.webkit3d ? "3d(" : "("), TRANSLATE_CLOSE:L.Browser.webkit3d ? ",0)" : ")"});
++L.Draggable = L.Class.extend({includes:L.Mixin.Events, statics:{START:L.Browser.touch ? "touchstart" : "mousedown", END:L.Browser.touch ? "touchend" : "mouseup", MOVE:L.Browser.touch ? "touchmove" : "mousemove", TAP_TOLERANCE:15}, initialize:function(a, b) {
++  this._element = a;
++  this._dragStartTarget = b || a
++}, enable:function() {
++  if(!this._enabled) {
++    L.DomEvent.addListener(this._dragStartTarget, L.Draggable.START, this._onDown, this), this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    L.DomEvent.removeListener(this._dragStartTarget, L.Draggable.START, this._onDown), this._enabled = !1
++  }
++}, _onDown:function(a) {
++  if(!(a.shiftKey || a.which != 1 && a.button != 1 && !a.touches) && !(a.touches && a.touches.length > 1)) {
++    var b = a.touches && a.touches.length == 1 ? a.touches[0] : a;
++    L.DomEvent.preventDefault(a);
++    L.Browser.mobileWebkit && (b.target.className += " leaflet-active");
++    this._moved = !1;
++    L.DomUtil.disableTextSelection();
++    this._setMovingCursor();
++    this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
++    this._startPoint = new L.Point(b.clientX, b.clientY);
++    L.DomEvent.addListener(document, L.Draggable.MOVE, this._onMove, this);
++    L.DomEvent.addListener(document, L.Draggable.END, this._onUp, this)
++  }
++}, _onMove:function(a) {
++  if(!(a.touches && a.touches.length > 1)) {
++    L.DomEvent.preventDefault(a);
++    a = a.touches && a.touches.length == 1 ? a.touches[0] : a;
++    if(!this._moved) {
++      this.fire("dragstart"), this._moved = !0
++    }
++    this._newPos = this._startPos.add(new L.Point(a.clientX, a.clientY)).subtract(this._startPoint);
++    L.Util.requestAnimFrame(this._updatePosition, this, !0);
++    this.fire("drag")
++  }
++}, _updatePosition:function() {
++  L.DomUtil.setPosition(this._element, this._newPos)
++}, _onUp:function(a) {
++  if(a.changedTouches) {
++    var a = a.changedTouches[0], b = a.target, c = this._newPos && this._newPos.distanceTo(this._startPos) || 0;
++    b.className = b.className.replace(" leaflet-active", "");
++    c < L.Draggable.TAP_TOLERANCE && this._simulateEvent("click", a)
++  }
++  L.DomUtil.enableTextSelection();
++  this._restoreCursor();
++  L.DomEvent.removeListener(document, L.Draggable.MOVE, this._onMove);
++  L.DomEvent.removeListener(document, L.Draggable.END, this._onUp);
++  this._moved && this.fire("dragend")
++}, _removeActiveClass:function() {
++}, _setMovingCursor:function() {
++  this._bodyCursor = document.body.style.cursor;
++  document.body.style.cursor = "move"
++}, _restoreCursor:function() {
++  document.body.style.cursor = this._bodyCursor
++}, _simulateEvent:function(a, b) {
++  var c = document.createEvent("MouseEvent");
++  c.initMouseEvent(a, !0, !0, window, 1, b.screenX, b.screenY, b.clientX, b.clientY, !1, !1, !1, !1, 0, null);
++  b.target.dispatchEvent(c)
++}});
++L.Transition = L.Class.extend({includes:L.Mixin.Events, statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition}, implemented:function() {
++  return L.Transition.NATIVE || L.Transition.TIMER
++}}, options:{easing:"ease", duration:0.5}, _setProperty:function(a, b) {
++  var c = L.Transition.CUSTOM_PROPS_SETTERS;
++  if(a in c) {
++    c[a](this._el, b)
++  }else {
++    this._el.style[a] = b
++  }
++}});
++L.Transition = L.Transition.extend({statics:function() {
++  var a = L.DomUtil.TRANSITION;
++  return{NATIVE:!!a, TRANSITION:a, PROPERTY:a + "Property", DURATION:a + "Duration", EASING:a + "TimingFunction", END:a == "webkitTransition" || a == "OTransition" ? a + "End" : "transitionend", CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit ? L.DomUtil.TRANSFORM : "top, left"}}
++}(), options:{fakeStepInterval:100}, initialize:function(a, b) {
++  this._el = a;
++  L.Util.setOptions(this, b);
++  L.DomEvent.addListener(a, L.Transition.END, this._onTransitionEnd, this);
++  this._onFakeStep = L.Util.bind(this._onFakeStep, this)
++}, run:function(a) {
++  var b, c = [], d = L.Transition.CUSTOM_PROPS_PROPERTIES;
++  for(b in a) {
++    a.hasOwnProperty(b) && (b = d[b] ? d[b] : b, b = b.replace(/([A-Z])/g, function(a) {
++      return"-" + a.toLowerCase()
++    }), c.push(b))
++  }
++  this._el.style[L.Transition.DURATION] = this.options.duration + "s";
++  this._el.style[L.Transition.EASING] = this.options.easing;
++  this._el.style[L.Transition.PROPERTY] = c.join(", ");
++  for(b in a) {
++    a.hasOwnProperty(b) && this._setProperty(b, a[b])
++  }
++  this._inProgress = !0;
++  this.fire("start");
++  L.Transition.NATIVE ? this._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval) : this._onTransitionEnd()
++}, _onFakeStep:function() {
++  this.fire("step")
++}, _onTransitionEnd:function() {
++  if(this._inProgress) {
++    this._inProgress = !1, clearInterval(this._timer), this._el.style[L.Transition.PROPERTY] = "none", this.fire("step"), this.fire("end")
++  }
++}});
++L.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({statics:{getTime:Date.now || function() {
++  return+new Date
++}, TIMER:!0, EASINGS:{ease:[0.25, 0.1, 0.25, 1], linear:[0, 0, 1, 1], "ease-in":[0.42, 0, 1, 1], "ease-out":[0, 0, 0.58, 1], "ease-in-out":[0.42, 0, 0.58, 1]}, CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition}, UNIT_RE:/^[\d\.]+(\D*)$/}, options:{fps:50}, initialize:function(a, b) {
++  this._el = a;
++  L.Util.extend(this.options, b);
++  var c = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS.ease;
++  this._p1 = new L.Point(0, 0);
++  this._p2 = new L.Point(c[0], c[1]);
++  this._p3 = new L.Point(c[2], c[3]);
++  this._p4 = new L.Point(1, 1);
++  this._step = L.Util.bind(this._step, this);
++  this._interval = Math.round(1E3 / this.options.fps)
++}, run:function(a) {
++  this._props = {};
++  var b = L.Transition.CUSTOM_PROPS_GETTERS, c = L.Transition.UNIT_RE;
++  this.fire("start");
++  for(var d in a) {
++    if(a.hasOwnProperty(d)) {
++      var e = {};
++      if(d in b) {
++        e.from = b[d](this._el)
++      }else {
++        var f = this._el.style[d].match(c);
++        e.from = parseFloat(f[0]);
++        e.unit = f[1]
++      }
++      e.to = a[d];
++      this._props[d] = e
++    }
++  }
++  clearInterval(this._timer);
++  this._timer = setInterval(this._step, this._interval);
++  this._startTime = L.Transition.getTime()
++}, _step:function() {
++  var a = L.Transition.getTime() - this._startTime, b = this.options.duration * 1E3;
++  a < b ? this._runFrame(this._cubicBezier(a / b)) : (this._runFrame(1), this._complete())
++}, _runFrame:function(a) {
++  var b = L.Transition.CUSTOM_PROPS_SETTERS, c, d;
++  for(c in this._props) {
++    this._props.hasOwnProperty(c) && (d = this._props[c], c in b ? (d = d.to.subtract(d.from).multiplyBy(a).add(d.from), b[c](this._el, d)) : this._el.style[c] = (d.to - d.from) * a + d.from + d.unit)
++  }
++  this.fire("step")
++}, _complete:function() {
++  clearInterval(this._timer);
++  this.fire("end")
++}, _cubicBezier:function(a) {
++  var b = 3 * Math.pow(1 - a, 2) * a, c = 3 * (1 - a) * Math.pow(a, 2), d = Math.pow(a, 3), a = this._p1.multiplyBy(Math.pow(1 - a, 3)), b = this._p2.multiplyBy(b), c = this._p3.multiplyBy(c), d = this._p4.multiplyBy(d);
++  return a.add(b).add(c).add(d).y
++}});
++L.LatLng = function(a, b, c) {
++  c !== !0 && (a = Math.max(Math.min(a, 90), -90), b = (b + 180) % 360 + (b < -180 ? 180 : -180));
++  this.lat = a;
++  this.lng = b
++};
++L.Util.extend(L.LatLng, {DEG_TO_RAD:Math.PI / 180, RAD_TO_DEG:180 / Math.PI, MAX_MARGIN:1.0E-9});
++L.LatLng.prototype = {equals:function(a) {
++  if(!(a instanceof L.LatLng)) {
++    return!1
++  }
++  return Math.max(Math.abs(this.lat - a.lat), Math.abs(this.lng - a.lng)) <= L.LatLng.MAX_MARGIN
++}, toString:function() {
++  return"LatLng(" + L.Util.formatNum(this.lat) + ", " + L.Util.formatNum(this.lng) + ")"
++}};
++L.LatLngBounds = L.Class.extend({initialize:function(a, b) {
++  if(a) {
++    for(var c = a instanceof Array ? a : [a, b], d = 0, e = c.length;d < e;d++) {
++      this.extend(c[d])
++    }
++  }
++}, extend:function(a) {
++  !this._southWest && !this._northEast ? (this._southWest = new L.LatLng(a.lat, a.lng), this._northEast = new L.LatLng(a.lat, a.lng)) : (this._southWest.lat = Math.min(a.lat, this._southWest.lat), this._southWest.lng = Math.min(a.lng, this._southWest.lng), this._northEast.lat = Math.max(a.lat, this._northEast.lat), this._northEast.lng = Math.max(a.lng, this._northEast.lng))
++}, getCenter:function() {
++  return new L.LatLng((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2)
++}, getSouthWest:function() {
++  return this._southWest
++}, getNorthEast:function() {
++  return this._northEast
++}, getNorthWest:function() {
++  return new L.LatLng(this._northEast.lat, this._southWest.lng)
++}, getSouthEast:function() {
++  return new L.LatLng(this._southWest.lat, this._northEast.lng)
++}, contains:function(a) {
++  var b = this._southWest, c = this._northEast, d;
++  a instanceof L.LatLngBounds ? (d = a.getSouthWest(), a = a.getNorthEast()) : d = a;
++  return d.lat >= b.lat && a.lat <= c.lat && d.lng >= b.lng && a.lng <= c.lng
++}});
++L.Projection = {};
++L.Projection.SphericalMercator = {MAX_LATITUDE:85.0511287798, project:function(a) {
++  var b = L.LatLng.DEG_TO_RAD, c = this.MAX_LATITUDE, d = a.lng * b, a = Math.max(Math.min(c, a.lat), -c) * b, a = Math.log(Math.tan(Math.PI / 4 + a / 2));
++  return new L.Point(d, a)
++}, unproject:function(a, b) {
++  var c = L.LatLng.RAD_TO_DEG;
++  return new L.LatLng((2 * Math.atan(Math.exp(a.y)) - Math.PI / 2) * c, a.x * c, b)
++}};
++L.Projection.LonLat = {project:function(a) {
++  return new L.Point(a.lng, a.lat)
++}, unproject:function(a, b) {
++  return new L.LatLng(a.y, a.x, b)
++}};
++L.Projection.Mercator = {MAX_LATITUDE:85.0840591556, R_MINOR:6356752.3142, R_MAJOR:6378137, project:function(a) {
++  var b = L.LatLng.DEG_TO_RAD, c = this.MAX_LATITUDE, d = this.R_MAJOR, e = a.lng * b * d, a = Math.max(Math.min(c, a.lat), -c) * b, b = this.R_MINOR / d, b = Math.sqrt(1 - b * b), c = b * Math.sin(a), c = Math.pow((1 - c) / (1 + c), b * 0.5), a = -d * Math.log(Math.tan(0.5 * (Math.PI * 0.5 - a)) / c);
++  return new L.Point(e, a)
++}, unproject:function(a, b) {
++  for(var c = L.LatLng.RAD_TO_DEG, d = this.R_MAJOR, e = a.x * c / d, f = this.R_MINOR / d, f = Math.sqrt(1 - f * f), d = Math.exp(-a.y / d), g = Math.PI / 2 - 2 * Math.atan(d), h = 15, j = 0.1;Math.abs(j) > 1.0E-7 && --h > 0;) {
++    j = f * Math.sin(g), j = Math.PI / 2 - 2 * Math.atan(d * Math.pow((1 - j) / (1 + j), 0.5 * f)) - g, g += j
++  }
++  return new L.LatLng(g * c, e, b)
++}};
++L.CRS = {latLngToPoint:function(a, b) {
++  return this.transformation._transform(this.projection.project(a), b)
++}, pointToLatLng:function(a, b, c) {
++  return this.projection.unproject(this.transformation.untransform(a, b), c)
++}, project:function(a) {
++  return this.projection.project(a)
++}};
++L.CRS.EPSG3857 = L.Util.extend({}, L.CRS, {code:"EPSG:3857", projection:L.Projection.SphericalMercator, transformation:new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5), project:function(a) {
++  return this.projection.project(a).multiplyBy(6378137)
++}});
++L.CRS.EPSG900913 = L.Util.extend({}, L.CRS.EPSG3857, {code:"EPSG:900913"});
++L.CRS.EPSG4326 = L.Util.extend({}, L.CRS, {code:"EPSG:4326", projection:L.Projection.LonLat, transformation:new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)});
++L.CRS.EPSG3395 = L.Util.extend({}, L.CRS, {code:"EPSG:3395", projection:L.Projection.Mercator, transformation:function() {
++  var a = L.Projection.Mercator;
++  return new L.Transformation(0.5 / (Math.PI * a.R_MAJOR), 0.5, -0.5 / (Math.PI * a.R_MINOR), 0.5)
++}()});
++L.LayerGroup = L.Class.extend({initialize:function(a) {
++  this._layers = {};
++  if(a) {
++    for(var b = 0, c = a.length;b < c;b++) {
++      this.addLayer(a[b])
++    }
++  }
++}, addLayer:function(a) {
++  this._layers[L.Util.stamp(a)] = a;
++  this._map && this._map.addLayer(a);
++  return this
++}, removeLayer:function(a) {
++  delete this._layers[L.Util.stamp(a)];
++  this._map && this._map.removeLayer(a);
++  return this
++}, clearLayers:function() {
++  this._iterateLayers(this.removeLayer, this);
++  return this
++}, onAdd:function(a) {
++  this._map = a;
++  this._iterateLayers(a.addLayer, a)
++}, onRemove:function(a) {
++  this._iterateLayers(a.removeLayer, a);
++  delete this._map
++}, _iterateLayers:function(a, b) {
++  for(var c in this._layers) {
++    this._layers.hasOwnProperty(c) && a.call(b, this._layers[c])
++  }
++}});
++L.FeatureGroup = L.LayerGroup.extend({includes:L.Mixin.Events, addLayer:function(a) {
++  this._initEvents(a);
++  L.LayerGroup.prototype.addLayer.call(this, a);
++  this._popupContent && a.bindPopup && a.bindPopup(this._popupContent)
++}, bindPopup:function(a) {
++  this._popupContent = a;
++  for(var b in this._layers) {
++    this._layers.hasOwnProperty(b) && this._layers[b].bindPopup && this._layers[b].bindPopup(a)
++  }
++}, _events:["click", "dblclick", "mouseover", "mouseout"], _initEvents:function(a) {
++  for(var b = 0, c = this._events.length;b < c;b++) {
++    a.on(this._events[b], this._propagateEvent, this)
++  }
++}, _propagateEvent:function(a) {
++  a.layer = a.target;
++  a.target = this;
++  this.fire(a.type, a)
++}});
++L.TileLayer = L.Class.extend({includes:L.Mixin.Events, options:{minZoom:0, maxZoom:18, tileSize:256, subdomains:"abc", errorTileUrl:"", attribution:"", opacity:1, scheme:"xyz", noWrap:!1, unloadInvisibleTiles:L.Browser.mobileWebkit, updateWhenIdle:L.Browser.mobileWebkit}, initialize:function(a, b) {
++  L.Util.setOptions(this, b);
++  this._url = a;
++  if(typeof this.options.subdomains == "string") {
++    this.options.subdomains = this.options.subdomains.split("")
++  }
++}, onAdd:function(a) {
++  this._map = a;
++  this._initContainer();
++  this._createTileProto();
++  a.on("viewreset", this._reset, this);
++  if(this.options.updateWhenIdle) {
++    a.on("moveend", this._update, this)
++  }else {
++    this._limitedUpdate = L.Util.limitExecByInterval(this._update, 100, this), a.on("move", this._limitedUpdate, this)
++  }
++  this._reset();
++  this._update()
++}, onRemove:function() {
++  this._map.getPanes().tilePane.removeChild(this._container);
++  this._container = null;
++  this._map.off("viewreset", this._reset, this);
++  this.options.updateWhenIdle ? this._map.off("moveend", this._update, this) : this._map.off("move", this._limitedUpdate, this)
++}, getAttribution:function() {
++  return this.options.attribution
++}, setOpacity:function(a) {
++  this.options.opacity = a;
++  this._setOpacity(a);
++  if(L.Browser.webkit) {
++    for(i in this._tiles) {
++      this._tiles[i].style.webkitTransform += " translate(0,0)"
++    }
++  }
++}, _setOpacity:function(a) {
++  a < 1 && L.DomUtil.setOpacity(this._container, a)
++}, _initContainer:function() {
++  var a = this._map.getPanes().tilePane;
++  if(!this._container || a.empty) {
++    this._container = L.DomUtil.create("div", "leaflet-layer", a), this._setOpacity(this.options.opacity)
++  }
++}, _reset:function() {
++  this._tiles = {};
++  this._initContainer();
++  this._container.innerHTML = ""
++}, _update:function() {
++  var a = this._map.getPixelBounds(), b = this.options.tileSize, c = new L.Point(Math.floor(a.min.x / b), Math.floor(a.min.y / b)), a = new L.Point(Math.floor(a.max.x / b), Math.floor(a.max.y / b)), c = new L.Bounds(c, a);
++  this._addTilesFromCenterOut(c);
++  this.options.unloadInvisibleTiles && this._removeOtherTiles(c)
++}, _addTilesFromCenterOut:function(a) {
++  for(var b = [], c = a.getCenter(), d = a.min.y;d <= a.max.y;d++) {
++    for(var e = a.min.x;e <= a.max.x;e++) {
++      e + ":" + d in this._tiles || b.push(new L.Point(e, d))
++    }
++  }
++  b.sort(function(a, b) {
++    return a.distanceTo(c) - b.distanceTo(c)
++  });
++  this._tilesToLoad = b.length;
++  a = 0;
++  for(d = this._tilesToLoad;a < d;a++) {
++    this._addTile(b[a])
++  }
++}, _removeOtherTiles:function(a) {
++  var b, c, d;
++  for(d in this._tiles) {
++    if(this._tiles.hasOwnProperty(d) && (b = d.split(":"), c = parseInt(b[0], 10), b = parseInt(b[1], 10), c < a.min.x || c > a.max.x || b < a.min.y || b > a.max.y)) {
++      this._tiles[d].src = "", this._tiles[d].parentNode == this._container && this._container.removeChild(this._tiles[d]), delete this._tiles[d]
++    }
++  }
++}, _addTile:function(a) {
++  var b = this._getTilePos(a), c = this._map.getZoom(), d = a.x + ":" + a.y, e = 1 << c;
++  if(!this.options.noWrap) {
++    a.x = (a.x % e + e) % e
++  }
++  if(!(a.y < 0 || a.y >= e)) {
++    var f = this._createTile();
++    L.DomUtil.setPosition(f, b);
++    this._tiles[d] = f;
++    if(this.options.scheme == "tms") {
++      a.y = e - a.y - 1
++    }
++    this._loadTile(f, a, c);
++    this._container.appendChild(f)
++  }
++}, _getTilePos:function(a) {
++  var b = this._map.getPixelOrigin();
++  return a.multiplyBy(this.options.tileSize).subtract(b)
++}, getTileUrl:function(a, b) {
++  return this._url.replace("{s}", this.options.subdomains[(a.x + a.y) % this.options.subdomains.length]).replace("{z}", b).replace("{x}", a.x).replace("{y}", a.y)
++}, _createTileProto:function() {
++  this._tileImg = L.DomUtil.create("img", "leaflet-tile");
++  this._tileImg.galleryimg = "no";
++  var a = this.options.tileSize;
++  this._tileImg.style.width = a + "px";
++  this._tileImg.style.height = a + "px"
++}, _createTile:function() {
++  var a = this._tileImg.cloneNode(!1);
++  a.onselectstart = a.onmousemove = L.Util.falseFn;
++  return a
++}, _loadTile:function(a, b, c) {
++  a._layer = this;
++  a.onload = this._tileOnLoad;
++  a.onerror = this._tileOnError;
++  a.src = this.getTileUrl(b, c)
++}, _tileOnLoad:function() {
++  var a = this._layer;
++  this.className += " leaflet-tile-loaded";
++  a.fire("tileload", {tile:this, url:this.src});
++  a._tilesToLoad--;
++  a._tilesToLoad || a.fire("load")
++}, _tileOnError:function() {
++  var a = this._layer;
++  a.fire("tileerror", {tile:this, url:this.src});
++  if(a = a.options.errorTileUrl) {
++    this.src = a
++  }
++}});
++L.TileLayer.WMS = L.TileLayer.extend({defaultWmsParams:{service:"WMS", request:"GetMap", version:"1.1.1", layers:"", styles:"", format:"image/jpeg", transparent:!1}, initialize:function(a, b) {
++  this._url = a;
++  this.wmsParams = L.Util.extend({}, this.defaultWmsParams);
++  this.wmsParams.width = this.wmsParams.height = this.options.tileSize;
++  for(var c in b) {
++    this.options.hasOwnProperty(c) || (this.wmsParams[c] = b[c])
++  }
++  L.Util.setOptions(this, b)
++}, onAdd:function(a) {
++  this.wmsParams[parseFloat(this.wmsParams.version) >= 1.3 ? "crs" : "srs"] = a.options.crs.code;
++  L.TileLayer.prototype.onAdd.call(this, a)
++}, getTileUrl:function(a) {
++  var b = this.options.tileSize, a = a.multiplyBy(b), b = a.add(new L.Point(b, b)), a = this._map.unproject(a, this._zoom, !0), b = this._map.unproject(b, this._zoom, !0), a = this._map.options.crs.project(a), b = this._map.options.crs.project(b), b = [a.x, b.y, b.x, a.y].join(",");
++  return this._url + L.Util.getParamString(this.wmsParams) + "&bbox=" + b
++}});
++L.TileLayer.Canvas = L.TileLayer.extend({options:{async:!1}, initialize:function(a) {
++  L.Util.setOptions(this, a)
++}, _createTileProto:function() {
++  this._canvasProto = L.DomUtil.create("canvas", "leaflet-tile");
++  var a = this.options.tileSize;
++  this._canvasProto.width = a;
++  this._canvasProto.height = a
++}, _createTile:function() {
++  var a = this._canvasProto.cloneNode(!1);
++  a.onselectstart = a.onmousemove = L.Util.falseFn;
++  return a
++}, _loadTile:function(a, b, c) {
++  a._layer = this;
++  this.drawTile(a, b, c);
++  this.options.async || this.tileDrawn()
++}, drawTile:function() {
++}, tileDrawn:function(a) {
++  this._tileOnLoad.call(a)
++}});
++L.ImageOverlay = L.Class.extend({includes:L.Mixin.Events, initialize:function(a, b) {
++  this._url = a;
++  this._bounds = b
++}, onAdd:function(a) {
++  this._map = a;
++  this._image || this._initImage();
++  a.getPanes().overlayPane.appendChild(this._image);
++  a.on("viewreset", this._reset, this);
++  this._reset()
++}, onRemove:function(a) {
++  a.getPanes().overlayPane.removeChild(this._image);
++  a.off("viewreset", this._reset, this)
++}, _initImage:function() {
++  this._image = L.DomUtil.create("img", "leaflet-image-layer");
++  this._image.style.visibility = "hidden";
++  L.Util.extend(this._image, {galleryimg:"no", onselectstart:L.Util.falseFn, onmousemove:L.Util.falseFn, onload:this._onImageLoad, src:this._url})
++}, _reset:function() {
++  var a = this._map.latLngToLayerPoint(this._bounds.getNorthWest()), b = this._map.latLngToLayerPoint(this._bounds.getSouthEast()).subtract(a);
++  L.DomUtil.setPosition(this._image, a);
++  this._image.style.width = b.x + "px";
++  this._image.style.height = b.y + "px"
++}, _onImageLoad:function() {
++  this.style.visibility = ""
++}});
++L.Popup = L.Class.extend({includes:L.Mixin.Events, options:{maxWidth:300, autoPan:!0, closeButton:!0, offset:new L.Point(0, 2), autoPanPadding:new L.Point(5, 5)}, initialize:function(a) {
++  L.Util.setOptions(this, a)
++}, onAdd:function(a) {
++  this._map = a;
++  this._container || this._initLayout();
++  this._updateContent();
++  this._container.style.opacity = "0";
++  this._map._panes.popupPane.appendChild(this._container);
++  this._map.on("viewreset", this._updatePosition, this);
++  if(this._map.options.closePopupOnClick) {
++    this._map.on("preclick", this._close, this)
++  }
++  this._update();
++  this._container.style.opacity = "1";
++  this._opened = !0
++}, onRemove:function(a) {
++  a._panes.popupPane.removeChild(this._container);
++  a.off("viewreset", this._updatePosition, this);
++  a.off("click", this._close, this);
++  this._container.style.opacity = "0";
++  this._opened = !1
++}, setLatLng:function(a) {
++  this._latlng = a;
++  this._opened && this._update();
++  return this
++}, setContent:function(a) {
++  this._content = a;
++  this._opened && this._update();
++  return this
++}, _close:function() {
++  this._opened && this._map.removeLayer(this)
++}, _initLayout:function() {
++  this._container = L.DomUtil.create("div", "leaflet-popup");
++  this._closeButton = L.DomUtil.create("a", "leaflet-popup-close-button", this._container);
++  this._closeButton.href = "#close";
++  this._closeButton.onclick = L.Util.bind(this._onCloseButtonClick, this);
++  this._wrapper = L.DomUtil.create("div", "leaflet-popup-content-wrapper", this._container);
++  L.DomEvent.disableClickPropagation(this._wrapper);
++  this._contentNode = L.DomUtil.create("div", "leaflet-popup-content", this._wrapper);
++  this._tipContainer = L.DomUtil.create("div", "leaflet-popup-tip-container", this._container);
++  this._tip = L.DomUtil.create("div", "leaflet-popup-tip", this._tipContainer)
++}, _update:function() {
++  this._container.style.visibility = "hidden";
++  this._updateContent();
++  this._updateLayout();
++  this._updatePosition();
++  this._container.style.visibility = "";
++  this._adjustPan()
++}, _updateContent:function() {
++  if(this._content) {
++    typeof this._content == "string" ? this._contentNode.innerHTML = this._content : (this._contentNode.innerHTML = "", this._contentNode.appendChild(this._content))
++  }
++}, _updateLayout:function() {
++  this._container.style.width = "";
++  this._container.style.whiteSpace = "nowrap";
++  var a = this._container.offsetWidth;
++  this._container.style.width = (a > this.options.maxWidth ? this.options.maxWidth : a) + "px";
++  this._container.style.whiteSpace = "";
++  this._containerWidth = this._container.offsetWidth
++}, _updatePosition:function() {
++  var a = this._map.latLngToLayerPoint(this._latlng);
++  this._containerBottom = -a.y - this.options.offset.y;
++  this._containerLeft = a.x - Math.round(this._containerWidth / 2) + this.options.offset.x;
++  this._container.style.bottom = this._containerBottom + "px";
++  this._container.style.left = this._containerLeft + "px"
++}, _adjustPan:function() {
++  if(this.options.autoPan) {
++    var a = this._container.offsetHeight, b = this._map.layerPointToContainerPoint(new L.Point(this._containerLeft, -a - this._containerBottom)), c = new L.Point(0, 0), d = this.options.autoPanPadding, e = this._map.getSize();
++    if(b.x < 0) {
++      c.x = b.x - d.x
++    }
++    if(b.x + this._containerWidth > e.x) {
++      c.x = b.x + this._containerWidth - e.x + d.x
++    }
++    if(b.y < 0) {
++      c.y = b.y - d.y
++    }
++    if(b.y + a > e.y) {
++      c.y = b.y + a - e.y + d.y
++    }
++    (c.x || c.y) && this._map.panBy(c)
++  }
++}, _onCloseButtonClick:function(a) {
++  this._close();
++  L.DomEvent.stop(a)
++}});
++L.Icon = L.Class.extend({iconUrl:L.ROOT_URL + "images/marker.png", shadowUrl:L.ROOT_URL + "images/marker-shadow.png", iconSize:new L.Point(25, 41), shadowSize:new L.Point(41, 41), iconAnchor:new L.Point(13, 41), popupAnchor:new L.Point(0, -33), initialize:function(a) {
++  if(a) {
++    this.iconUrl = a
++  }
++}, createIcon:function() {
++  return this._createIcon("icon")
++}, createShadow:function() {
++  return this._createIcon("shadow")
++}, _createIcon:function(a) {
++  var b = this[a + "Size"], c = this[a + "Url"], d = this._createImg(c);
++  if(!c) {
++    return null
++  }
++  d.className = "leaflet-marker-" + a;
++  d.style.marginLeft = -this.iconAnchor.x + "px";
++  d.style.marginTop = -this.iconAnchor.y + "px";
++  if(b) {
++    d.style.width = b.x + "px", d.style.height = b.y + "px"
++  }
++  return d
++}, _createImg:function(a) {
++  var b;
++  L.Browser.ie6 ? (b = document.createElement("div"), b.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + a + '")') : (b = document.createElement("img"), b.src = a);
++  return b
++}});
++L.Marker = L.Class.extend({includes:L.Mixin.Events, options:{icon:new L.Icon, title:"", clickable:!0, draggable:!1}, initialize:function(a, b) {
++  L.Util.setOptions(this, b);
++  this._latlng = a
++}, onAdd:function(a) {
++  this._map = a;
++  this._initIcon();
++  a.on("viewreset", this._reset, this);
++  this._reset()
++}, onRemove:function(a) {
++  this._removeIcon();
++  a.off("viewreset", this._reset, this)
++}, getLatLng:function() {
++  return this._latlng
++}, setLatLng:function(a) {
++  this._latlng = a;
++  this._reset()
++}, setIcon:function(a) {
++  this._removeIcon();
++  this._icon = this._shadow = null;
++  this.options.icon = a;
++  this._initIcon()
++}, _initIcon:function() {
++  if(!this._icon) {
++    this._icon = this.options.icon.createIcon();
++    if(this.options.title) {
++      this._icon.title = this.options.title
++    }
++    this._initInteraction()
++  }
++  if(!this._shadow) {
++    this._shadow = this.options.icon.createShadow()
++  }
++  this._map._panes.markerPane.appendChild(this._icon);
++  this._shadow && this._map._panes.shadowPane.appendChild(this._shadow)
++}, _removeIcon:function() {
++  this._map._panes.markerPane.removeChild(this._icon);
++  this._shadow && this._map._panes.shadowPane.removeChild(this._shadow)
++}, _reset:function() {
++  var a = this._map.latLngToLayerPoint(this._latlng).round();
++  L.DomUtil.setPosition(this._icon, a);
++  this._shadow && L.DomUtil.setPosition(this._shadow, a);
++  this._icon.style.zIndex = a.y
++}, _initInteraction:function() {
++  if(this.options.clickable) {
++    this._icon.className += " leaflet-clickable";
++    L.DomEvent.addListener(this._icon, "click", this._onMouseClick, this);
++    for(var a = ["dblclick", "mousedown", "mouseover", "mouseout"], b = 0;b < a.length;b++) {
++      L.DomEvent.addListener(this._icon, a[b], this._fireMouseEvent, this)
++    }
++  }
++  if(L.Handler.MarkerDrag) {
++    this.dragging = new L.Handler.MarkerDrag(this), this.options.draggable && this.dragging.enable()
++  }
++}, _onMouseClick:function(a) {
++  L.DomEvent.stopPropagation(a);
++  (!this.dragging || !this.dragging.moved()) && this.fire(a.type)
++}, _fireMouseEvent:function(a) {
++  this.fire(a.type);
++  L.DomEvent.stopPropagation(a)
++}});
++L.Marker.include({openPopup:function() {
++  this._popup.setLatLng(this._latlng);
++  this._map.openPopup(this._popup);
++  return this
++}, closePopup:function() {
++  this._popup && this._popup._close()
++}, bindPopup:function(a, b) {
++  b = L.Util.extend({offset:this.options.icon.popupAnchor}, b);
++  this._popup = new L.Popup(b);
++  this._popup.setContent(a);
++  this.on("click", this.openPopup, this);
++  return this
++}});
++L.Path = L.Class.extend({includes:[L.Mixin.Events], statics:function() {
++  return{SVG_NS:"http://www.w3.org/2000/svg", SVG:!(!document.createElementNS || !document.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect), CLIP_PADDING:0.5}
++}(), options:{stroke:!0, color:"#0033ff", weight:5, opacity:0.5, fill:!1, fillColor:null, fillOpacity:0.2, clickable:!0, updateOnMoveEnd:!1}, initialize:function(a) {
++  L.Util.setOptions(this, a)
++}, onAdd:function(a) {
++  this._map = a;
++  this._initElements();
++  this._initEvents();
++  this.projectLatlngs();
++  this._updatePath();
++  a.on("viewreset", this.projectLatlngs, this);
++  this._updateTrigger = this.options.updateOnMoveEnd ? "moveend" : "viewreset";
++  a.on(this._updateTrigger, this._updatePath, this)
++}, onRemove:function(a) {
++  a._pathRoot.removeChild(this._container);
++  a.off("viewreset", this._projectLatlngs, this);
++  a.off(this._updateTrigger, this._updatePath, this)
++}, projectLatlngs:function() {
++}, getPathString:function() {
++}, setStyle:function(a) {
++  L.Util.setOptions(this, a);
++  this._path && this._updateStyle()
++}, _initElements:function() {
++  this._initRoot();
++  this._initPath();
++  this._initStyle()
++}, _initRoot:function() {
++  if(!this._map._pathRoot) {
++    this._map._pathRoot = this._createElement("svg"), this._map._panes.overlayPane.appendChild(this._map._pathRoot), this._map.on("moveend", this._updateSvgViewport, this), this._updateSvgViewport()
++  }
++}, _updateSvgViewport:function() {
++  this._updateViewport();
++  var a = this._map._pathViewport, b = a.min, c = a.max, a = c.x - b.x, c = c.y - b.y, d = this._map._pathRoot, e = this._map._panes.overlayPane;
++  L.Browser.mobileWebkit && e.removeChild(d);
++  L.DomUtil.setPosition(d, b);
++  d.setAttribute("width", a);
++  d.setAttribute("height", c);
++  d.setAttribute("viewBox", [b.x, b.y, a, c].join(" "));
++  L.Browser.mobileWebkit && e.appendChild(d)
++}, _updateViewport:function() {
++  var a = L.Path.CLIP_PADDING, b = this._map.getSize(), c = L.DomUtil.getPosition(this._map._mapPane).multiplyBy(-1).subtract(b.multiplyBy(a)), a = c.add(b.multiplyBy(1 + a * 2));
++  this._map._pathViewport = new L.Bounds(c, a)
++}, _initPath:function() {
++  this._container = this._createElement("g");
++  this._path = this._createElement("path");
++  this._container.appendChild(this._path);
++  this._map._pathRoot.appendChild(this._container)
++}, _initStyle:function() {
++  this.options.stroke && (this._path.setAttribute("stroke-linejoin", "round"), this._path.setAttribute("stroke-linecap", "round"));
++  this.options.fill ? this._path.setAttribute("fill-rule", "evenodd") : this._path.setAttribute("fill", "none");
++  this._updateStyle()
++}, _updateStyle:function() {
++  this.options.stroke && (this._path.setAttribute("stroke", this.options.color), this._path.setAttribute("stroke-opacity", this.options.opacity), this._path.setAttribute("stroke-width", this.options.weight));
++  this.options.fill && (this._path.setAttribute("fill", this.options.fillColor || this.options.color), this._path.setAttribute("fill-opacity", this.options.fillOpacity))
++}, _updatePath:function() {
++  var a = this.getPathString();
++  a || (a = "M0 0");
++  this._path.setAttribute("d", a)
++}, _createElement:function(a) {
++  return document.createElementNS(L.Path.SVG_NS, a)
++}, _initEvents:function() {
++  if(this.options.clickable) {
++    L.Path.VML || this._path.setAttribute("class", "leaflet-clickable");
++    L.DomEvent.addListener(this._container, "click", this._onMouseClick, this);
++    for(var a = ["dblclick", "mousedown", "mouseover", "mouseout"], b = 0;b < a.length;b++) {
++      L.DomEvent.addListener(this._container, a[b], this._fireMouseEvent, this)
++    }
++  }
++}, _onMouseClick:function(a) {
++  (!this._map.dragging || !this._map.dragging.moved()) && this._fireMouseEvent(a)
++}, _fireMouseEvent:function(a) {
++  this.hasEventListeners(a.type) && (this.fire(a.type, {latlng:this._map.mouseEventToLatLng(a), layerPoint:this._map.mouseEventToLayerPoint(a)}), L.DomEvent.stopPropagation(a))
++}, _redraw:function() {
++  this.projectLatlngs();
++  this._updatePath()
++}});
++L.Path.VML = function() {
++  var a = document.createElement("div");
++  a.innerHTML = '<v:shape adj="1"/>';
++  a = a.firstChild;
++  a.style.behavior = "url(#default#VML)";
++  return a && typeof a.adj == "object"
++}();
++L.Path = L.Path.SVG || !L.Path.VML ? L.Path : L.Path.extend({statics:{CLIP_PADDING:0.02}, _createElement:function() {
++  try {
++    return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function(a) {
++      return document.createElement("<lvml:" + a + ' class="lvml">')
++    }
++  }catch(a) {
++    return function(a) {
++      return document.createElement("<" + a + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')
++    }
++  }
++}(), _initRoot:function() {
++  if(!this._map._pathRoot) {
++    this._map._pathRoot = document.createElement("div"), this._map._pathRoot.className = "leaflet-vml-container", this._map._panes.overlayPane.appendChild(this._map._pathRoot), this._map.on("moveend", this._updateViewport, this), this._updateViewport()
++  }
++}, _initPath:function() {
++  this._container = this._createElement("shape");
++  this._container.className += " leaflet-vml-shape" + (this.options.clickable ? " leaflet-clickable" : "");
++  this._container.coordsize = "1 1";
++  this._path = this._createElement("path");
++  this._container.appendChild(this._path);
++  this._map._pathRoot.appendChild(this._container)
++}, _initStyle:function() {
++  this.options.stroke ? (this._stroke = this._createElement("stroke"), this._stroke.endcap = "round", this._container.appendChild(this._stroke)) : this._container.stroked = !1;
++  this.options.fill ? (this._container.filled = !0, this._fill = this._createElement("fill"), this._container.appendChild(this._fill)) : this._container.filled = !1;
++  this._updateStyle()
++}, _updateStyle:function() {
++  if(this.options.stroke) {
++    this._stroke.weight = this.options.weight + "px", this._stroke.color = this.options.color, this._stroke.opacity = this.options.opacity
++  }
++  if(this.options.fill) {
++    this._fill.color = this.options.fillColor || this.options.color, this._fill.opacity = this.options.fillOpacity
++  }
++}, _updatePath:function() {
++  this._container.style.display = "none";
++  this._path.v = this.getPathString() + " ";
++  this._container.style.display = ""
++}});
++L.Path.include({bindPopup:function(a, b) {
++  if(!this._popup || this._popup.options !== b) {
++    this._popup = new L.Popup(b)
++  }
++  this._popup.setContent(a);
++  if(!this._openPopupAdded) {
++    this.on("click", this._openPopup, this), this._openPopupAdded = !0
++  }
++  return this
++}, _openPopup:function(a) {
++  this._popup.setLatLng(a.latlng);
++  this._map.openPopup(this._popup)
++}});
++L.Polyline = L.Path.extend({initialize:function(a, b) {
++  L.Path.prototype.initialize.call(this, b);
++  this._latlngs = a
++}, options:{smoothFactor:1, noClip:!1, updateOnMoveEnd:!0}, projectLatlngs:function() {
++  this._originalPoints = [];
++  for(var a = 0, b = this._latlngs.length;a < b;a++) {
++    this._originalPoints[a] = this._map.latLngToLayerPoint(this._latlngs[a])
++  }
++}, getPathString:function() {
++  for(var a = 0, b = this._parts.length, c = "";a < b;a++) {
++    c += this._getPathPartStr(this._parts[a])
++  }
++  return c
++}, getLatLngs:function() {
++  return this._latlngs
++}, setLatLngs:function(a) {
++  this._latlngs = a;
++  this._redraw();
++  return this
++}, addLatLng:function(a) {
++  this._latlngs.push(a);
++  this._redraw();
++  return this
++}, spliceLatLngs:function() {
++  var a = [].splice.apply(this._latlngs, arguments);
++  this._redraw();
++  return a
++}, _getPathPartStr:function(a) {
++  for(var b = L.Path.VML, c = 0, d = a.length, e = "", f;c < d;c++) {
++    f = a[c], b && f._round(), e += (c ? "L" : "M") + f.x + " " + f.y
++  }
++  return e
++}, _clipPoints:function() {
++  var a = this._originalPoints, b = a.length, c, d, e;
++  if(this.options.noClip) {
++    this._parts = [a]
++  }else {
++    var f = this._parts = [], g = this._map._pathViewport, h = L.LineUtil;
++    for(d = c = 0;c < b - 1;c++) {
++      if(e = h.clipSegment(a[c], a[c + 1], g, c)) {
++        if(f[d] = f[d] || [], f[d].push(e[0]), e[1] != a[c + 1] || c == b - 2) {
++          f[d].push(e[1]), d++
++        }
++      }
++    }
++  }
++}, _simplifyPoints:function() {
++  for(var a = this._parts, b = L.LineUtil, c = 0, d = a.length;c < d;c++) {
++    a[c] = b.simplify(a[c], this.options.smoothFactor)
++  }
++}, _updatePath:function() {
++  this._clipPoints();
++  this._simplifyPoints();
++  L.Path.prototype._updatePath.call(this)
++}});
++L.Polygon = L.Polyline.extend({options:{fill:!0}, initialize:function(a, b) {
++  L.Polyline.prototype.initialize.call(this, a, b);
++  if(a[0] instanceof Array) {
++    this._latlngs = a[0], this._holes = a.slice(1)
++  }
++}, projectLatlngs:function() {
++  L.Polyline.prototype.projectLatlngs.call(this);
++  this._holePoints = [];
++  if(this._holes) {
++    for(var a = 0, b = this._holes.length;a < b;a++) {
++      this._holePoints[a] = [];
++      for(var c = 0, d = this._holes[a].length;c < d;c++) {
++        this._holePoints[a][c] = this._map.latLngToLayerPoint(this._holes[a][c])
++      }
++    }
++  }
++}, _clipPoints:function() {
++  var a = [];
++  this._parts = [this._originalPoints].concat(this._holePoints);
++  if(!this.options.noClip) {
++    for(var b = 0, c = this._parts.length;b < c;b++) {
++      var d = L.PolyUtil.clipPolygon(this._parts[b], this._map._pathViewport);
++      d.length && a.push(d)
++    }
++    this._parts = a
++  }
++}, _getPathPartStr:function(a) {
++  return L.Polyline.prototype._getPathPartStr.call(this, a) + (L.Path.SVG ? "z" : "x")
++}});
++(function() {
++  function a(a) {
++    return L.FeatureGroup.extend({initialize:function(c, d) {
++      this._layers = {};
++      for(var e = 0, f = c.length;e < f;e++) {
++        this.addLayer(new a(c[e], d))
++      }
++    }, setStyle:function(a) {
++      for(var b in this._layers) {
++        this._layers.hasOwnProperty(b) && this._layers[b].setStyle && this._layers[b].setStyle(a)
++      }
++    }})
++  }
++  L.MultiPolyline = a(L.Polyline);
++  L.MultiPolygon = a(L.Polygon)
++})();
++L.Circle = L.Path.extend({initialize:function(a, b, c) {
++  L.Path.prototype.initialize.call(this, c);
++  this._latlng = a;
++  this._mRadius = b
++}, options:{fill:!0}, setLatLng:function(a) {
++  this._latlng = a;
++  this._redraw();
++  return this
++}, setRadius:function(a) {
++  this._mRadius = a;
++  this._redraw();
++  return this
++}, projectLatlngs:function() {
++  var a = this._map.options.scale(this._map._zoom);
++  this._point = this._map.latLngToLayerPoint(this._latlng);
++  this._radius = this._mRadius / 40075017 * a
++}, getPathString:function() {
++  var a = this._point, b = this._radius;
++  return L.Path.SVG ? "M" + a.x + "," + (a.y - b) + "A" + b + "," + b + ",0,1,1," + (a.x - 0.1) + "," + (a.y - b) + " z" : (a._round(), b = Math.round(b), "AL " + a.x + "," + a.y + " " + b + "," + b + " 0,23592600")
++}});
++L.CircleMarker = L.Circle.extend({options:{radius:10, weight:2}, initialize:function(a, b) {
++  L.Circle.prototype.initialize.call(this, a, null, b);
++  this._radius = this.options.radius
++}, projectLatlngs:function() {
++  this._point = this._map.latLngToLayerPoint(this._latlng)
++}, setRadius:function(a) {
++  this._radius = a;
++  this._redraw();
++  return this
++}});
++L.GeoJSON = L.LayerGroup.extend({includes:L.Mixin.Events, initialize:function(a, b) {
++  L.Util.setOptions(this, b);
++  this._geojson = a;
++  this._layers = {};
++  a && this.addGeoJSON(a)
++}, addGeoJSON:function(a) {
++  if(a.features) {
++    for(var b = 0, c = a.features.length;b < c;b++) {
++      this.addGeoJSON(a.features[b])
++    }
++  }else {
++    b = a.type == "Feature" ? a.geometry : a, c = L.GeoJSON.geometryToLayer(b, this.options.pointToLayer), this.fire("featureparse", {layer:c, properties:a.properties, geometryType:b.type, bbox:a.bbox, id:a.id}), this.addLayer(c)
++  }
++}});
++L.Util.extend(L.GeoJSON, {geometryToLayer:function(a, b) {
++  var c = a.coordinates, d, e, f, g = [];
++  switch(a.type) {
++    case "Point":
++      return d = this.coordsToLatLng(c), b ? b(d) : new L.Marker(d);
++    case "MultiPoint":
++      e = 0;
++      for(f = c.length;e < f;e++) {
++        d = this.coordsToLatLng(c[e]), d = b ? b(d) : new L.Marker(d), g.push(d)
++      }
++      return new L.FeatureGroup(g);
++    case "LineString":
++      return c = this.coordsToLatLngs(c), new L.Polyline(c);
++    case "Polygon":
++      return c = this.coordsToLatLngs(c, 1), new L.Polygon(c);
++    case "MultiLineString":
++      return c = this.coordsToLatLngs(c, 1), new L.MultiPolyline(c);
++    case "MultiPolygon":
++      return c = this.coordsToLatLngs(c, 2), new L.MultiPolygon(c);
++    case "GeometryCollection":
++      e = 0;
++      for(f = a.geometries.length;e < f;e++) {
++        d = this.geometryToLayer(a.geometries[e]), g.push(d)
++      }
++      return new L.FeatureGroup(g);
++    default:
++      throw Error("Invalid GeoJSON object.");
++  }
++}, coordsToLatLng:function(a, b) {
++  var c = parseFloat(a[b ? 0 : 1]), d = parseFloat(a[b ? 1 : 0]);
++  return new L.LatLng(c, d)
++}, coordsToLatLngs:function(a, b, c) {
++  var d, e = [], f, g = a.length;
++  for(f = 0;f < g;f++) {
++    d = b ? this.coordsToLatLngs(a[f], b - 1, c) : this.coordsToLatLng(a[f], c), e.push(d)
++  }
++  return e
++}});
++L.Handler = L.Class.extend({initialize:function(a) {
++  this._map = a
++}, enabled:function() {
++  return!!this._enabled
++}});
++L.Handler.MapDrag = L.Handler.extend({enable:function() {
++  if(!this._enabled) {
++    if(!this._draggable) {
++      this._draggable = new L.Draggable(this._map._mapPane, this._map._container), this._draggable.on("dragstart", this._onDragStart, this), this._draggable.on("drag", this._onDrag, this), this._draggable.on("dragend", this._onDragEnd, this)
++    }
++    this._draggable.enable();
++    this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    this._draggable.disable(), this._enabled = !1
++  }
++}, moved:function() {
++  return this._draggable._moved
++}, _onDragStart:function() {
++  this._map.fire("movestart");
++  this._map.fire("dragstart")
++}, _onDrag:function() {
++  this._map.fire("move");
++  this._map.fire("drag")
++}, _onDragEnd:function() {
++  this._map.fire("moveend");
++  this._map.fire("dragend")
++}});
++L.Handler.TouchZoom = L.Handler.extend({enable:function() {
++  if(L.Browser.mobileWebkit && !this._enabled) {
++    L.DomEvent.addListener(this._map._container, "touchstart", this._onTouchStart, this), this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    L.DomEvent.removeListener(this._map._container, "touchstart", this._onTouchStart, this), this._enabled = !1
++  }
++}, _onTouchStart:function(a) {
++  if(a.touches && !(a.touches.length != 2 || this._map._animatingZoom)) {
++    var b = this._map.mouseEventToLayerPoint(a.touches[0]), c = this._map.mouseEventToLayerPoint(a.touches[1]), d = this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));
++    this._startCenter = b.add(c).divideBy(2, !0);
++    this._startDist = b.distanceTo(c);
++    this._moved = !1;
++    this._zooming = !0;
++    this._centerOffset = d.subtract(this._startCenter);
++    L.DomEvent.addListener(document, "touchmove", this._onTouchMove, this);
++    L.DomEvent.addListener(document, "touchend", this._onTouchEnd, this);
++    L.DomEvent.preventDefault(a)
++  }
++}, _onTouchMove:function(a) {
++  if(a.touches && a.touches.length == 2) {
++    if(!this._moved) {
++      this._map._mapPane.className += " leaflet-zoom-anim", this._map._prepareTileBg(), this._moved = !0
++    }
++    var b = this._map.mouseEventToLayerPoint(a.touches[0]), c = this._map.mouseEventToLayerPoint(a.touches[1]);
++    this._scale = b.distanceTo(c) / this._startDist;
++    this._delta = b.add(c).divideBy(2, !0).subtract(this._startCenter);
++    this._map._tileBg.style.webkitTransform = [L.DomUtil.getTranslateString(this._delta), L.DomUtil.getScaleString(this._scale, this._startCenter)].join(" ");
++    L.DomEvent.preventDefault(a)
++  }
++}, _onTouchEnd:function() {
++  if(this._moved && this._zooming) {
++    this._zooming = !1;
++    var a = this._map.getZoom(), b = Math.log(this._scale) / Math.LN2, b = this._map._limitZoom(a + (b > 0 ? Math.ceil(b) : Math.floor(b))), a = b - a, c = this._centerOffset.subtract(this._delta).divideBy(this._scale), d = this._map.unproject(this._map.getPixelOrigin().add(this._startCenter).add(c));
++    L.DomEvent.removeListener(document, "touchmove", this._onTouchMove);
++    L.DomEvent.removeListener(document, "touchend", this._onTouchEnd);
++    this._map._runAnimation(d, b, Math.pow(2, a) / this._scale, this._startCenter.add(c))
++  }
++}});
++L.Handler.ScrollWheelZoom = L.Handler.extend({enable:function() {
++  if(!this._enabled) {
++    L.DomEvent.addListener(this._map._container, "mousewheel", this._onWheelScroll, this), this._delta = 0, this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    L.DomEvent.removeListener(this._map._container, "mousewheel", this._onWheelScroll), this._enabled = !1
++  }
++}, _onWheelScroll:function(a) {
++  this._delta += L.DomEvent.getWheelDelta(a);
++  this._lastMousePos = this._map.mouseEventToContainerPoint(a);
++  clearTimeout(this._timer);
++  this._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);
++  L.DomEvent.preventDefault(a)
++}, _performZoom:function() {
++  var a = Math.round(this._delta);
++  this._delta = 0;
++  if(a) {
++    var b = this._getCenterForScrollWheelZoom(this._lastMousePos, a), a = this._map.getZoom() + a;
++    this._map._limitZoom(a) != this._map._zoom && this._map.setView(b, a)
++  }
++}, _getCenterForScrollWheelZoom:function(a, b) {
++  var c = this._map.getPixelBounds().getCenter(), d = this._map.getSize().divideBy(2), d = a.subtract(d).multiplyBy(1 - Math.pow(2, -b));
++  return this._map.unproject(c.add(d), this._map._zoom, !0)
++}});
++L.Handler.DoubleClickZoom = L.Handler.extend({enable:function() {
++  if(!this._enabled) {
++    this._map.on("dblclick", this._onDoubleClick, this._map), this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    this._map.off("dblclick", this._onDoubleClick, this._map), this._enabled = !1
++  }
++}, _onDoubleClick:function(a) {
++  this.setView(a.latlng, this._zoom + 1)
++}});
++L.Handler.ShiftDragZoom = L.Handler.extend({initialize:function(a) {
++  this._map = a;
++  this._container = a._container;
++  this._pane = a._panes.overlayPane
++}, enable:function() {
++  if(!this._enabled) {
++    L.DomEvent.addListener(this._container, "mousedown", this._onMouseDown, this), this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    L.DomEvent.removeListener(this._container, "mousedown", this._onMouseDown), this._enabled = !1
++  }
++}, _onMouseDown:function(a) {
++  if(!a.shiftKey || a.which != 1 && a.button != 1) {
++    return!1
++  }
++  L.DomUtil.disableTextSelection();
++  this._startLayerPoint = this._map.mouseEventToLayerPoint(a);
++  this._box = L.DomUtil.create("div", "leaflet-zoom-box", this._pane);
++  L.DomUtil.setPosition(this._box, this._startLayerPoint);
++  this._container.style.cursor = "crosshair";
++  L.DomEvent.addListener(document, "mousemove", this._onMouseMove, this);
++  L.DomEvent.addListener(document, "mouseup", this._onMouseUp, this);
++  L.DomEvent.preventDefault(a)
++}, _onMouseMove:function(a) {
++  var b = this._map.mouseEventToLayerPoint(a), a = b.x - this._startLayerPoint.x, c = b.y - this._startLayerPoint.y, b = new L.Point(Math.min(b.x, this._startLayerPoint.x), Math.min(b.y, this._startLayerPoint.y));
++  L.DomUtil.setPosition(this._box, b);
++  this._box.style.width = Math.abs(a) - 4 + "px";
++  this._box.style.height = Math.abs(c) - 4 + "px"
++}, _onMouseUp:function(a) {
++  this._pane.removeChild(this._box);
++  this._container.style.cursor = "";
++  L.DomUtil.enableTextSelection();
++  L.DomEvent.removeListener(document, "mousemove", this._onMouseMove);
++  L.DomEvent.removeListener(document, "mouseup", this._onMouseUp);
++  a = this._map.mouseEventToLayerPoint(a);
++  this._map.fitBounds(new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint), this._map.layerPointToLatLng(a)))
++}});
++L.Handler.MarkerDrag = L.Handler.extend({initialize:function(a) {
++  this._marker = a
++}, enable:function() {
++  if(!this._enabled) {
++    if(!this._draggable) {
++      this._draggable = new L.Draggable(this._marker._icon, this._marker._icon), this._draggable.on("dragstart", this._onDragStart, this), this._draggable.on("drag", this._onDrag, this), this._draggable.on("dragend", this._onDragEnd, this)
++    }
++    this._draggable.enable();
++    this._enabled = !0
++  }
++}, disable:function() {
++  if(this._enabled) {
++    this._draggable.disable(), this._enabled = !1
++  }
++}, moved:function() {
++  return this._draggable && this._draggable._moved
++}, _onDragStart:function() {
++  this._marker.closePopup();
++  this._marker.fire("movestart");
++  this._marker.fire("dragstart")
++}, _onDrag:function() {
++  var a = L.DomUtil.getPosition(this._marker._icon);
++  L.DomUtil.setPosition(this._marker._shadow, a);
++  this._marker._latlng = this._marker._map.layerPointToLatLng(a);
++  this._marker.fire("move");
++  this._marker.fire("drag")
++}, _onDragEnd:function() {
++  this._marker.fire("moveend");
++  this._marker.fire("dragend")
++}});
++L.Control = {};
++L.Control.Position = {TOP_LEFT:"topLeft", TOP_RIGHT:"topRight", BOTTOM_LEFT:"bottomLeft", BOTTOM_RIGHT:"bottomRight"};
++L.Control.Zoom = L.Class.extend({onAdd:function(a) {
++  this._map = a;
++  this._container = L.DomUtil.create("div", "leaflet-control-zoom");
++  this._zoomInButton = this._createButton("Zoom in", "leaflet-control-zoom-in", this._map.zoomIn, this._map);
++  this._zoomOutButton = this._createButton("Zoom out", "leaflet-control-zoom-out", this._map.zoomOut, this._map);
++  this._container.appendChild(this._zoomInButton);
++  this._container.appendChild(this._zoomOutButton)
++}, getContainer:function() {
++  return this._container
++}, getPosition:function() {
++  return L.Control.Position.TOP_LEFT
++}, _createButton:function(a, b, c, d) {
++  var e = document.createElement("a");
++  e.href = "#";
++  e.title = a;
++  e.className = b;
++  L.DomEvent.disableClickPropagation(e);
++  L.DomEvent.addListener(e, "click", L.DomEvent.preventDefault);
++  L.DomEvent.addListener(e, "click", c, d);
++  return e
++}});
++L.Control.Attribution = L.Class.extend({onAdd:function(a) {
++  this._container = L.DomUtil.create("div", "leaflet-control-attribution");
++  this._map = a;
++  this._prefix = 'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';
++  this._attributions = {};
++  this._update()
++}, getPosition:function() {
++  return L.Control.Position.BOTTOM_RIGHT
++}, getContainer:function() {
++  return this._container
++}, setPrefix:function(a) {
++  this._prefix = a
++}, addAttribution:function(a) {
++  a && (this._attributions[a] = !0, this._update())
++}, removeAttribution:function(a) {
++  a && (delete this._attributions[a], this._update())
++}, _update:function() {
++  if(this._map) {
++    var a = [], b;
++    for(b in this._attributions) {
++      this._attributions.hasOwnProperty(b) && a.push(b)
++    }
++    b = [];
++    this._prefix && b.push(this._prefix);
++    a.length && b.push(a.join(", "));
++    this._container.innerHTML = b.join(" &mdash; ")
++  }
++}});
++L.Map = L.Class.extend({includes:L.Mixin.Events, options:{crs:L.CRS.EPSG3857 || L.CRS.EPSG4326, scale:function(a) {
++  return 256 * (1 << a)
++}, center:null, zoom:null, layers:[], dragging:!0, touchZoom:L.Browser.mobileWebkit && !L.Browser.android, scrollWheelZoom:!L.Browser.mobileWebkit, doubleClickZoom:!0, shiftDragZoom:!0, zoomControl:!0, attributionControl:!0, fadeAnimation:L.DomUtil.TRANSITION && !L.Browser.android, zoomAnimation:L.DomUtil.TRANSITION && !L.Browser.android && !L.Browser.mobileOpera, trackResize:!0, closePopupOnClick:!0}, initialize:function(a, b) {
++  L.Util.setOptions(this, b);
++  this._container = L.DomUtil.get(a);
++  this._initLayout();
++  L.DomEvent && (this._initEvents(), L.Handler && this._initInteraction(), L.Control && this._initControls());
++  var c = this.options.center, d = this.options.zoom;
++  c !== null && d !== null && this.setView(c, d, !0);
++  c = this.options.layers;
++  c = c instanceof Array ? c : [c];
++  this._tileLayersNum = 0;
++  this._initLayers(c)
++}, setView:function(a, b) {
++  this._resetView(a, this._limitZoom(b));
++  return this
++}, setZoom:function(a) {
++  return this.setView(this.getCenter(), a)
++}, zoomIn:function() {
++  return this.setZoom(this._zoom + 1)
++}, zoomOut:function() {
++  return this.setZoom(this._zoom - 1)
++}, fitBounds:function(a) {
++  var b = this.getBoundsZoom(a);
++  return this.setView(a.getCenter(), b)
++}, fitWorld:function() {
++  var a = new L.LatLng(-60, -170), b = new L.LatLng(85, 179);
++  return this.fitBounds(new L.LatLngBounds(a, b))
++}, panTo:function(a) {
++  return this.setView(a, this._zoom)
++}, panBy:function(a) {
++  this.fire("movestart");
++  this._rawPanBy(a);
++  this.fire("move");
++  this.fire("moveend");
++  return this
++}, addLayer:function(a) {
++  var b = L.Util.stamp(a);
++  if(this._layers[b]) {
++    return this
++  }
++  this._layers[b] = a;
++  if(a.options && !isNaN(a.options.maxZoom)) {
++    this._layersMaxZoom = Math.max(this._layersMaxZoom || 0, a.options.maxZoom)
++  }
++  if(a.options && !isNaN(a.options.minZoom)) {
++    this._layersMinZoom = Math.min(this._layersMinZoom || Infinity, a.options.minZoom)
++  }
++  this.options.zoomAnimation && L.TileLayer && a instanceof L.TileLayer && (this._tileLayersNum++, a.on("load", this._onTileLayerLoad, this));
++  this.attributionControl && a.getAttribution && this.attributionControl.addAttribution(a.getAttribution());
++  b = function() {
++    a.onAdd(this);
++    this.fire("layeradd", {layer:a})
++  };
++  if(this._loaded) {
++    b.call(this)
++  }else {
++    this.on("load", b, this)
++  }
++  return this
++}, removeLayer:function(a) {
++  var b = L.Util.stamp(a);
++  this._layers[b] && (a.onRemove(this), delete this._layers[b], this.options.zoomAnimation && L.TileLayer && a instanceof L.TileLayer && (this._tileLayersNum--, a.off("load", this._onTileLayerLoad, this)), this.attributionControl && a.getAttribution && this.attributionControl.removeAttribution(a.getAttribution()), this.fire("layerremove", {layer:a}));
++  return this
++}, invalidateSize:function() {
++  this._sizeChanged = !0;
++  this.fire("move");
++  clearTimeout(this._sizeTimer);
++  this._sizeTimer = setTimeout(L.Util.bind(function() {
++    this.fire("moveend")
++  }, this), 200);
++  return this
++}, getCenter:function(a) {
++  var b = this.getSize().divideBy(2);
++  return this.unproject(this._getTopLeftPoint().add(b), this._zoom, a)
++}, getZoom:function() {
++  return this._zoom
++}, getBounds:function() {
++  var a = this.getPixelBounds(), b = this.unproject(new L.Point(a.min.x, a.max.y)), a = this.unproject(new L.Point(a.max.x, a.min.y));
++  return new L.LatLngBounds(b, a)
++}, getMinZoom:function() {
++  return isNaN(this.options.minZoom) ? this._layersMinZoom || 0 : this.options.minZoom
++}, getMaxZoom:function() {
++  return isNaN(this.options.maxZoom) ? this._layersMaxZoom || Infinity : this.options.maxZoom
++}, getBoundsZoom:function(a) {
++  var b = this.getSize(), c = this.getMinZoom(), d = this.getMaxZoom(), e = a.getNorthEast(), a = a.getSouthWest(), f, g;
++  do {
++    c++, f = this.project(e, c), g = this.project(a, c), f = new L.Point(f.x - g.x, g.y - f.y)
++  }while(f.x <= b.x && f.y <= b.y && c <= d);
++  return c - 1
++}, getSize:function() {
++  if(!this._size || this._sizeChanged) {
++    this._size = new L.Point(this._container.clientWidth, this._container.clientHeight), this._sizeChanged = !1
++  }
++  return this._size
++}, getPixelBounds:function() {
++  var a = this._getTopLeftPoint(), b = this.getSize();
++  return new L.Bounds(a, a.add(b))
++}, getPixelOrigin:function() {
++  return this._initialTopLeftPoint
++}, getPanes:function() {
++  return this._panes
++}, mouseEventToContainerPoint:function(a) {
++  return L.DomEvent.getMousePosition(a, this._container)
++}, mouseEventToLayerPoint:function(a) {
++  return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))
++}, mouseEventToLatLng:function(a) {
++  return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))
++}, containerPointToLayerPoint:function(a) {
++  return a.subtract(L.DomUtil.getPosition(this._mapPane))
++}, layerPointToContainerPoint:function(a) {
++  return a.add(L.DomUtil.getPosition(this._mapPane))
++}, layerPointToLatLng:function(a) {
++  return this.unproject(a.add(this._initialTopLeftPoint))
++}, latLngToLayerPoint:function(a) {
++  return this.project(a)._subtract(this._initialTopLeftPoint)
++}, project:function(a, b) {
++  b = typeof b == "undefined" ? this._zoom : b;
++  return this.options.crs.latLngToPoint(a, this.options.scale(b))
++}, unproject:function(a, b, c) {
++  b = typeof b == "undefined" ? this._zoom : b;
++  return this.options.crs.pointToLatLng(a, this.options.scale(b), c)
++}, _initLayout:function() {
++  var a = this._container;
++  a.className += " leaflet-container";
++  this.options.fadeAnimation && (a.className += " leaflet-fade-anim");
++  var b = L.DomUtil.getStyle(a, "position");
++  if(b != "absolute" && b != "relative") {
++    a.style.position = "relative"
++  }
++  this._initPanes();
++  this._initControlPos && this._initControlPos()
++}, _initPanes:function() {
++  var a = this._panes = {};
++  this._mapPane = a.mapPane = this._createPane("leaflet-map-pane", this._container);
++  this._tilePane = a.tilePane = this._createPane("leaflet-tile-pane", this._mapPane);
++  this._objectsPane = a.objectsPane = this._createPane("leaflet-objects-pane", this._mapPane);
++  a.shadowPane = this._createPane("leaflet-shadow-pane");
++  a.overlayPane = this._createPane("leaflet-overlay-pane");
++  a.markerPane = this._createPane("leaflet-marker-pane");
++  a.popupPane = this._createPane("leaflet-popup-pane")
++}, _createPane:function(a, b) {
++  return L.DomUtil.create("div", a, b || this._objectsPane)
++}, _resetView:function(a, b, c) {
++  var d = this._zoom != b;
++  this.fire("movestart");
++  this._zoom = b;
++  this._initialTopLeftPoint = this._getNewTopLeftPoint(a);
++  c ? this._initialTopLeftPoint._add(L.DomUtil.getPosition(this._mapPane)) : L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
++  this._tileLayersToLoad = this._tileLayersNum;
++  this.fire("viewreset");
++  this.fire("move");
++  d && this.fire("zoomend");
++  this.fire("moveend");
++  if(!this._loaded) {
++    this._loaded = !0, this.fire("load")
++  }
++}, _initLayers:function(a) {
++  this._layers = {};
++  for(var b = 0, c = a.length;b < c;b++) {
++    this.addLayer(a[b])
++  }
++}, _initControls:function() {
++  this.options.zoomControl && this.addControl(new L.Control.Zoom);
++  if(this.options.attributionControl) {
++    this.attributionControl = new L.Control.Attribution, this.addControl(this.attributionControl)
++  }
++}, _rawPanBy:function(a) {
++  var b = L.DomUtil.getPosition(this._mapPane);
++  L.DomUtil.setPosition(this._mapPane, b.subtract(a))
++}, _initEvents:function() {
++  L.DomEvent.addListener(this._container, "click", this._onMouseClick, this);
++  for(var a = ["dblclick", "mousedown", "mouseenter", "mouseleave", "mousemove"], b = 0;b < a.length;b++) {
++    L.DomEvent.addListener(this._container, a[b], this._fireMouseEvent, this)
++  }
++  this.options.trackResize && L.DomEvent.addListener(window, "resize", this.invalidateSize, this)
++}, _onMouseClick:function(a) {
++  if(!this.dragging || !this.dragging.moved()) {
++    this.fire("pre" + a.type), this._fireMouseEvent(a)
++  }
++}, _fireMouseEvent:function(a) {
++  var b = a.type, b = b == "mouseenter" ? "mouseover" : b == "mouseleave" ? "mouseout" : b;
++  this.hasEventListeners(b) && this.fire(b, {latlng:this.mouseEventToLatLng(a), layerPoint:this.mouseEventToLayerPoint(a)})
++}, _initInteraction:function() {
++  var a = {dragging:L.Handler.MapDrag, touchZoom:L.Handler.TouchZoom, doubleClickZoom:L.Handler.DoubleClickZoom, scrollWheelZoom:L.Handler.ScrollWheelZoom, shiftDragZoom:L.Handler.ShiftDragZoom}, b;
++  for(b in a) {
++    a.hasOwnProperty(b) && a[b] && (this[b] = new a[b](this), this.options[b] && this[b].enable())
++  }
++}, _onTileLayerLoad:function() {
++  this._tileLayersToLoad--;
++  if(this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {
++    clearTimeout(this._clearTileBgTimer), this._clearTileBgTimer = setTimeout(L.Util.bind(this._clearTileBg, this), 500)
++  }
++}, _getTopLeftPoint:function() {
++  if(!this._loaded) {
++    throw Error("Set map center and zoom first.");
++  }
++  return this._initialTopLeftPoint.subtract(L.DomUtil.getPosition(this._mapPane))
++}, _getNewTopLeftPoint:function(a) {
++  var b = this.getSize().divideBy(2);
++  return this.project(a).subtract(b).round()
++}, _limitZoom:function(a) {
++  var b = this.getMinZoom(), c = this.getMaxZoom();
++  return Math.max(b, Math.min(c, a))
++}});
++L.Map.include({locate:function(a) {
++  var b = {timeout:1E4};
++  L.Util.extend(b, a);
++  navigator.geolocation ? navigator.geolocation.getCurrentPosition(L.Util.bind(this._handleGeolocationResponse, this), L.Util.bind(this._handleGeolocationError, this), b) : this.fire("locationerror", {code:0, message:"Geolocation not supported."});
++  return this
++}, locateAndSetView:function(a, b) {
++  this._setViewOnLocate = !0;
++  this._maxLocateZoom = a || Infinity;
++  return this.locate(b)
++}, _handleGeolocationError:function(a) {
++  var a = a.code, b = a == 1 ? "permission denied" : a == 2 ? "position unavailable" : "timeout";
++  if(this._setViewOnLocate) {
++    this.fitWorld(), this._setViewOnLocate = !1
++  }
++  this.fire("locationerror", {code:a, message:"Geolocation error: " + b + "."})
++}, _handleGeolocationResponse:function(a) {
++  var b = 180 * a.coords.accuracy / 4E7, c = b * 2, d = a.coords.latitude, e = a.coords.longitude, f = new L.LatLng(d - b, e - c), b = new L.LatLng(d + b, e + c), f = new L.LatLngBounds(f, b);
++  if(this._setViewOnLocate) {
++    b = Math.min(this.getBoundsZoom(f), this._maxLocateZoom), this.setView(f.getCenter(), b), this._setViewOnLocate = !1
++  }
++  this.fire("locationfound", {latlng:new L.LatLng(d, e), bounds:f, accuracy:a.coords.accuracy})
++}});
++L.Map.include({openPopup:function(a) {
++  this.closePopup();
++  this._popup = a;
++  return this.addLayer(a)
++}, closePopup:function() {
++  this._popup && this.removeLayer(this._popup);
++  return this
++}});
++L.Map.include(!L.Transition || !L.Transition.implemented() ? {} : {setView:function(a, b, c) {
++  var b = this._limitZoom(b), d = this._zoom != b;
++  if(this._loaded && !c && this._layers && (c = this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint()), d ? this._zoomToIfCenterInView && this._zoomToIfCenterInView(a, b, c) : this._panByIfClose(c))) {
++    return this
++  }
++  this._resetView(a, b);
++  return this
++}, panBy:function(a) {
++  if(!this._panTransition) {
++    this._panTransition = new L.Transition(this._mapPane, {duration:0.3}), this._panTransition.on("step", this._onPanTransitionStep, this), this._panTransition.on("end", this._onPanTransitionEnd, this)
++  }
++  this.fire(this, "movestart");
++  this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)});
++  return this
++}, _onPanTransitionStep:function() {
++  this.fire("move")
++}, _onPanTransitionEnd:function() {
++  this.fire("moveend")
++}, _panByIfClose:function(a) {
++  if(this._offsetIsWithinView(a)) {
++    return this.panBy(a), !0
++  }
++  return!1
++}, _offsetIsWithinView:function(a, b) {
++  var c = b || 1, d = this.getSize();
++  return Math.abs(a.x) <= d.x * c && Math.abs(a.y) <= d.y * c
++}});
++L.Map.include(!L.DomUtil.TRANSITION ? {} : {_zoomToIfCenterInView:function(a, b, c) {
++  if(this._animatingZoom) {
++    return!0
++  }
++  if(!this.options.zoomAnimation) {
++    return!1
++  }
++  var d = Math.pow(2, b - this._zoom), c = c.divideBy(1 - 1 / d);
++  if(!this._offsetIsWithinView(c, 1)) {
++    return!1
++  }
++  this._mapPane.className += " leaflet-zoom-anim";
++  c = this.containerPointToLayerPoint(this.getSize().divideBy(2)).add(c);
++  this._prepareTileBg();
++  this._runAnimation(a, b, d, c);
++  return!0
++}, _runAnimation:function(a, b, c, d) {
++  this._animatingZoom = !0;
++  this._animateToCenter = a;
++  this._animateToZoom = b;
++  a = L.DomUtil.TRANSFORM;
++  if(L.Browser.gecko || window.opera) {
++    this._tileBg.style[a] += " translate(0,0)"
++  }
++  L.Browser.android ? (this._tileBg.style[a + "Origin"] = d.x + "px " + d.y + "px", c = "scale(" + c + ")") : c = L.DomUtil.getScaleString(c, d);
++  L.Util.falseFn(this._tileBg.offsetWidth);
++  d = {};
++  d[a] = this._tileBg.style[a] + " " + c;
++  this._tileBg.transition.run(d)
++}, _prepareTileBg:function() {
++  if(!this._tileBg) {
++    this._tileBg = this._createPane("leaflet-tile-pane", this._mapPane), this._tileBg.style.zIndex = 1
++  }
++  var a = this._tilePane, b = this._tileBg;
++  b.style[L.DomUtil.TRANSFORM] = "";
++  b.style.visibility = "hidden";
++  b.empty = !0;
++  a.empty = !1;
++  this._tilePane = this._panes.tilePane = b;
++  this._tileBg = a;
++  if(!this._tileBg.transition) {
++    this._tileBg.transition = new L.Transition(this._tileBg, {duration:0.3, easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}), this._tileBg.transition.on("end", this._onZoomTransitionEnd, this)
++  }
++  this._stopLoadingBgTiles()
++}, _stopLoadingBgTiles:function() {
++  for(var a = [].slice.call(this._tileBg.getElementsByTagName("img")), b = 0, c = a.length;b < c;b++) {
++    if(!a[b].complete) {
++      a[b].src = "", a[b].parentNode.removeChild(a[b])
++    }
++  }
++}, _onZoomTransitionEnd:function() {
++  this._restoreTileFront();
++  L.Util.falseFn(this._tileBg.offsetWidth);
++  this._resetView(this._animateToCenter, this._animateToZoom, !0);
++  this._mapPane.className = this._mapPane.className.replace(" leaflet-zoom-anim", "");
++  this._animatingZoom = !1
++}, _restoreTileFront:function() {
++  this._tilePane.innerHTML = "";
++  this._tilePane.style.visibility = "";
++  this._tilePane.style.zIndex = 2;
++  this._tileBg.style.zIndex = 1
++}, _clearTileBg:function() {
++  if(!this._animatingZoom && !this.touchZoom._zooming) {
++    this._tileBg.innerHTML = ""
++  }
++}});
++L.Map.include({addControl:function(a) {
++  a.onAdd(this);
++  var b = a.getPosition(), c = this._controlCorners[b], a = a.getContainer();
++  L.DomUtil.addClass(a, "leaflet-control");
++  b.indexOf("bottom") != -1 ? c.insertBefore(a, c.firstChild) : c.appendChild(a);
++  return this
++}, removeControl:function(a) {
++  var b = this._controlCorners[a.getPosition()], c = a.getContainer();
++  b.removeChild(c);
++  if(a.onRemove) {
++    a.onRemove(this)
++  }
++  return this
++}, _initControlPos:function() {
++  var a = this._controlCorners = {}, b = L.DomUtil.create("div", "leaflet-control-container", this._container);
++  L.Browser.mobileWebkit && (b.className += " leaflet-big-buttons");
++  a.topLeft = L.DomUtil.create("div", "leaflet-top leaflet-left", b);
++  a.topRight = L.DomUtil.create("div", "leaflet-top leaflet-right", b);
++  a.bottomLeft = L.DomUtil.create("div", "leaflet-bottom leaflet-left", b);
++  a.bottomRight = L.DomUtil.create("div", "leaflet-bottom leaflet-right", b)
++}});
++
diff --git a/patches/man-page.patch b/patches/man-page.patch
new file mode 100644 (file)
index 0000000..784ab12
--- /dev/null
@@ -0,0 +1,207 @@
+Author: Kacper Kowalik <xarthisius.kk@gmail.com>
+Description: Add man page for commandline utilities
+--- /dev/null
++++ b/doc/yt.1
+@@ -0,0 +1,99 @@
++.TH YT "1" "August 2015" "yt 3.2.3-1" "User Commands"
++.SH NAME
++yt \- command-line tool allowing to access some of yt's basic functionality without opening a python interpreter.
++.SH DESCRIPTION
++The tools is a collection of subcommands. These can quickly making plots of
++slices and projections through a dataset, updating yt's codebase, print
++basic statistics about a dataset, launch an IPython notebook session, and more.
++.TP
++usage: yt [\-h] [\-\-config CONFIG] [\-\-paste] [\-\-paste\-detailed] [\-\-detailed] [\-\-rpdb] [\-\-parallel] [\-\-version] subcommand
++.PP
++yt command line arguments
++.SS "optional arguments:"
++.TP
++\fB\-h\fR, \fB\-\-help\fR
++show this help message and exit
++.TP
++\fB\-\-config\fR CONFIG
++Set configuration option, in the form param=value
++.TP
++\fB\-\-paste\fR
++Paste traceback to paste.yt\-project.org
++.TP
++\fB\-\-paste\-detailed\fR
++Paste a detailed traceback with local variables to
++paste.yt\-project.org
++.TP
++\fB\-\-detailed\fR
++Display detailed traceback.
++.TP
++\fB\-\-rpdb\fR
++Enable remote pdb interaction (for parallel
++debugging).
++.TP
++\fB\-\-parallel\fR
++Run in MPI\-parallel mode (must be launched as an MPI
++task)
++.TP
++\fB\-\-version\fR
++show program's version number and exit
++.SS "subcommands:"
++.TP
++help
++Print help message
++.TP
++bugreport
++Report a bug in yt
++.TP
++hub_register
++Register a user on the Hub: http://hub.yt\-project.org/
++.TP
++instinfo
++Get some information about the yt installation
++.TP
++version
++Get some information about the yt installation
++.TP
++load
++Load a single dataset into an IPython instance
++.TP
++mapserver
++Serve a plot in a GMaps\-style interface
++.TP
++pastebin
++Post a script to an anonymous pastebin
++.TP
++pastebin_grab
++Print an online pastebin to STDOUT for local use.
++.TP
++upload_notebook
++Upload an IPython notebook to hub.yt\-project.org.
++.TP
++plot
++Create a set of images
++.TP
++rpdb
++Connect to a currently running (on localhost) rpd
++session. Commands run with \fB\-\-rpdb\fR will trigger an rpdb
++session with any uncaught exceptions.
++.TP
++notebook
++Run the IPython Notebook
++.TP
++stats
++Print stats and max/min value of a given field (if
++requested), for one or more datasets (default field is
++density)
++.TP
++update
++Update the yt installation to the most recent version
++.TP
++upload_image
++Upload an image to imgur.com. Must be PNG.
++.SH AUTHORS
++.B yt
++was primarily written by yt Development Team.
++.SH "SEE ALSO"
++Full documentation for the
++.B yt
++commandline can be found at http://yt-project.org/doc/
+--- /dev/null
++++ b/doc/iyt.1
+@@ -0,0 +1,45 @@
++.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.3.
++.TH IYT "1" "April 2016" "iyt 3.2.3-1" "User Commands"
++.SH NAME
++iyt \- iyt - Tools for Interactive Computing with yt and Python
++.SH DESCRIPTION
++usage: iyt [\-h] [\-\-config CONFIG] [\-\-paste] [\-\-paste\-detailed] [\-\-detailed]
++.IP
++[\-\-rpdb] [\-\-parallel]
++.PP
++yt command line arguments
++.SS "optional arguments:"
++.TP
++\fB\-h\fR, \fB\-\-help\fR
++show this help message and exit
++.TP
++\fB\-\-config\fR CONFIG
++Set configuration option, in the form param=value
++.TP
++\fB\-\-paste\fR
++Paste traceback to paste.yt\-project.org
++.TP
++\fB\-\-paste\-detailed\fR
++Paste a detailed traceback with local variables to paste
++\&.yt\-project.org
++.TP
++\fB\-\-detailed\fR
++Display detailed traceback.
++.TP
++\fB\-\-rpdb\fR
++Enable remote pdb interaction (for parallel debugging).
++.TP
++\fB\-\-parallel\fR
++Run in MPI\-parallel mode (must be launched as an MPI task)
++.SH "SEE ALSO"
++The full documentation for
++.B iyt
++is maintained as a Texinfo manual.  If the
++.B info
++and
++.B iyt
++programs are properly installed at your site, the command
++.IP
++.B info iyt
++.PP
++should give you access to the complete manual.
+--- /dev/null
++++ b/doc/yt_lodgeit.1
+@@ -0,0 +1,52 @@
++.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.3.
++.TH YT_LODGEIT.PY "1" "April 2016" "yt_lodgeit.py 3.2.3-1" "User Commands"
++.SH NAME
++yt_lodgeit.py \- yt_lodgeit - pastebin tool for yt
++.SH SYNOPSIS
++.B yt_lodgeit.py
++[\fI\,options\/\fR] [\fI\,FILE \/\fR...]
++.SH DESCRIPTION
++Read the files and paste their contents to http://paste.yt\-project.org/.
++If no file is given, read from standard input.
++If multiple files are given, they are put into a single paste.
++.SH OPTIONS
++.TP
++\fB\-h\fR, \fB\-\-help\fR
++show this help message and exit
++.TP
++\fB\-v\fR, \fB\-\-version\fR
++Print script version
++.TP
++\fB\-L\fR, \fB\-\-languages\fR
++Retrieve a list of supported languages
++.TP
++\fB\-l\fR LANGUAGE, \fB\-\-language\fR=\fI\,LANGUAGE\/\fR
++Used syntax highlighter for the file
++.TP
++\fB\-e\fR ENCODING, \fB\-\-encoding\fR=\fI\,ENCODING\/\fR
++Specify the encoding of a file (default is utf\-8 or
++guessing if available)
++.TP
++\fB\-b\fR, \fB\-\-open\-browser\fR
++Open the paste in a web browser
++.TP
++\fB\-p\fR, \fB\-\-private\fR
++Paste as private
++.TP
++\fB\-\-no\-clipboard\fR
++Don't copy the url into the clipboard
++.TP
++\fB\-\-download\fR=\fI\,UID\/\fR
++Download a given paste
++.SH "SEE ALSO"
++The full documentation for
++.B yt_lodgeit.py
++is maintained as a Texinfo manual.  If the
++.B info
++and
++.B yt_lodgeit.py
++programs are properly installed at your site, the command
++.IP
++.B info yt_lodgeit.py
++.PP
++should give you access to the complete manual.
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..1716c70
--- /dev/null
@@ -0,0 +1,4 @@
+fix_32bit_ftbfs.patch
+man-page.patch
+fix_embedded_jquery.patch
+fix_minified_leaflet.patch
diff --git a/python-yt.lintian-overrides b/python-yt.lintian-overrides
new file mode 100644 (file)
index 0000000..4634d82
--- /dev/null
@@ -0,0 +1,9 @@
+# iyt and yt are helper scripts, this is primarily a library
+python-yt: library-package-name-for-application
+python-yt: application-in-library-section
+
+# Don't need to worry about this for our fortran libraries
+python-yt: hardening-no-fortify-functions
+
+# Leave the leaflet images where they lie
+python-yt: image-file-in-usr-lib
diff --git a/python-yt.manpages b/python-yt.manpages
new file mode 100644 (file)
index 0000000..edc2b9c
--- /dev/null
@@ -0,0 +1,3 @@
+doc/yt2.1
+doc/iyt2.1
+doc/yt_lodgeit2.1
diff --git a/python3-yt.lintian-overrides b/python3-yt.lintian-overrides
new file mode 100644 (file)
index 0000000..3a2d7af
--- /dev/null
@@ -0,0 +1,9 @@
+# iyt and yt are helper scripts, this is primarily a library
+python3-yt: library-package-name-for-application
+python3-yt: application-in-library-section
+
+# Don't need to worry about this for our fortran libraries
+python3-yt: hardening-no-fortify-functions
+
+# Leave the leaflet images where they lie
+python3-yt: image-file-in-usr-lib
diff --git a/python3-yt.manpages b/python3-yt.manpages
new file mode 100644 (file)
index 0000000..2e3a6d0
--- /dev/null
@@ -0,0 +1,3 @@
+doc/yt.1
+doc/iyt.1
+doc/yt_lodgeit.1
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..d2f12a7
--- /dev/null
+++ b/rules
@@ -0,0 +1,39 @@
+#!/usr/bin/make -f
+#export DH_VERBOSE=1
+
+export PYBUILD_NAME=yt
+export http_proxy=127.0.0.1:9
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+export HOME=$(CURDIR)/debian/home
+
+%:
+       dh $@ --with python2,python3 --buildsystem=pybuild
+
+override_dh_clean:
+       dh_clean
+       rm -rf .eggs/
+
+override_dh_auto_install:
+       dh_auto_install
+       rm $(CURDIR)/debian/python-yt/usr/lib/python*/dist-packages/yt/extern/tqdm/LICENSE
+       rm $(CURDIR)/debian/python3-yt/usr/lib/python*/dist-packages/yt/extern/tqdm/LICENSE
+       rm $(CURDIR)/debian/python-yt/usr/lib/python*/dist-packages/yt/frontends/artio/artio_headers/LICENSE
+       rm $(CURDIR)/debian/python3-yt/usr/lib/python*/dist-packages/yt/frontends/artio/artio_headers/LICENSE
+       mv $(CURDIR)/debian/python-yt/usr/bin/yt $(CURDIR)/debian/python-yt/usr/bin/yt2
+       mv $(CURDIR)/debian/python-yt/usr/bin/iyt $(CURDIR)/debian/python-yt/usr/bin/iyt2
+       mkdir -p $(CURDIR)/debian/python-yt/usr/share/doc/python-yt/
+       mkdir -p $(CURDIR)/debian/python3-yt/usr/share/doc/python3-yt/
+       gzip -9 -c doc/source/reference/changelog.rst > $(CURDIR)/debian/python-yt/usr/share/doc/python-yt/changelog.gz
+       gzip -9 -c doc/source/reference/changelog.rst > $(CURDIR)/debian/python3-yt/usr/share/doc/python3-yt/changelog.gz
+
+override_dh_installman:
+       cp doc/yt.1 doc/yt2.1
+       cp doc/iyt.1 doc/iyt2.1
+       cp doc/yt_lodgeit.1 doc/yt_lodgeit2.1
+       dh_installman
+
+ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
+override_dh_auto_test:
+       mkdir -p $(HOME)
+       python setup.py build_ext -i && nosetests
+endif
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..dcda989
--- /dev/null
+++ b/watch
@@ -0,0 +1,3 @@
+version=3
+opts=uversionmangle=s/(rc|a|b|c)/~$1/ \
+https://pypi.debian.net/yt/yt-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))